導航:首頁 > 源碼編譯 > 動態編譯文件類型

動態編譯文件類型

發布時間:2022-02-08 04:22:17

❶ 怎麼動態編譯java源文件

(Write once, run anywhere)」 的目標。Java類文件中包含的位元組代碼可以被不同平台上的JVM所使用。Java位元組代碼不僅可以以文件形式存在於磁碟上,也可以通過網路方式來下載,還可以只存在於內存中。JVM中的類載入器會負責從包含位元組代碼的位元組數組(byte[])中定義出Java類。在某些情況下,可能會需要動態的生成 Java位元組代碼,或是對已有的Java位元組代碼進行修改。這個時候就需要用到本文中將要介紹的相關技術。首先介紹一下如何動態編譯Java源文件。
動態編譯Java源文件
在一般情況下,開發人員都是在程序運行之前就編寫完成了全部的Java源代碼並且成功編譯。對有些應用來說,Java源代碼的內容在運行時刻才能確定。這個時候就需要動態編譯源代碼來生成Java位元組代碼,再由JVM來載入執行。典型的場景是很多演算法競賽的在線評測系統(如PKU JudgeOnline),允許用戶上傳Java代碼,由系統在後台編譯、運行並進行判定。在動態編譯Java源文件時,使用的做法是直接在程序中調用Java編譯器。
JSR 199引入了Java編譯器API。如果使用JDK 6的話,可以通過此API來動態編譯Java代碼。比如下面的代碼用來動態編譯最簡單的Hello World類。該Java類的代碼是保存在一個字元串中的。
publicclassCompilerTest{
publicstaticvoidmain(String[]args)throwsException{
Stringsource="publicclassMain{publicstaticvoidmain(String[]args){System.out.println(\"HelloWorld!\");}}";
JavaCompilercompiler=ToolProvider.getSystemJavaCompiler();
=compiler.getStandardFileManager(null,null,null);
=newCompilerTest.StringSourceJavaObject("Main",source);
Iterable<extendsJavaFileObject>fileObjects=Arrays.asList(sourceObject);
CompilationTasktask=compiler.getTask(null,fileManager,null,null,null,fileObjects);
booleanresult=task.call();
if(result){

❷ 動態編譯和靜態編譯有何主要區別

靜態編譯與動態編譯的區別
1、動態編譯的可執行文件需要附帶一個的動態鏈接庫,在執行時,需要調用其對應動態鏈接庫中的命令。所以其優點一方面是縮小了執行文件本身的體積,另一方面是加快了編譯速度,節省了系統資源。缺點一是哪怕是很簡單的程序,只用到了鏈接庫中的一兩條命令,也需要附帶一個相對龐大的鏈接庫;二是如果其他計算機上沒有安裝對應的運行庫,則用動態編譯的可執行文件就不能運行。
2、靜態編譯就是編譯器在編譯可執行文件的時候,將可執行文件需要調用的對應動態鏈接庫(.so)中的部分提取出來,鏈接到可執行文件中去,使可執行文件在運行的時候不依賴於動態鏈接庫。所以其優缺點與動態編譯的可執行文件正好互補。

❸ 什麼是動態編譯

動態編譯是指根據不同情況編譯不同的文件,控制編譯過程,比如makefile的寫法等。

linux動態編譯的文件怎麼在arm中執行

先找一下有無arm-linux-gcc這個文件: find / -xdev -name arm-linux-gcc 再看一下有無執行許可權: ls -l arm-linux-gcc 再用絕對路徑執行一下看看: /path/to/arm-linux-gcc -v

❺ 在易語言里,什麼叫做靜態編譯,什麼叫做動態編譯那可以生成安裝包的是什麼編譯具體見補充

靜態編譯生成的文件可以共享給大家用
動態編譯生成的文件只能共享給安裝有易語言的人使用
這樣回答夠簡單了

❻ 在java代碼中實現動態編譯java文件

importjavax.tools.*;
importjava.io.*;
/**
*@authorhardneedl
*/
finalpublicclassMyCompile{

/**
*@paramargs命令行參數只有1個,即待編譯的源代碼文件的絕對路徑
*@throwsFileNotFoundException
*/
publicstaticvoidmain(String...args)throwsFileNotFoundException{

JavaCompilercompiler=ToolProvider.getSystemJavaCompiler();
intr=compiler.run(null,null,null,args[0]);
System.out.println(r==0?"成功":"失敗");
}

}

❼ 有什麼編譯型語言是動態類型的嗎

動態是用new動態申請內存的~~new出來的內存需要手動釋放~~比如說
int a=new int(10)~也就是用delete來釋放~~另外~動態分配的內存是在堆上面的~~~內存有~堆 棧 和常量存儲區~

靜態是一般的類型~~比如說int a=10;內存分配在棧上~~

另外棧內存上的數據是有順序的~~先進後出~~而在堆內存上是無序的~~所以需要指針來操作~~萬一指針丟了~~或者忘記釋放內存~是很麻煩的~~

但是堆上面的空間比較大~~一般32位機器上~應該~棧是16K~~堆是4M~~我可能記的不是很清楚了~~~具體你可以察一下~

❽ 靜態編譯和動態編譯有何不同

靜態編譯就是把庫函數編譯到你的程序里 這樣編譯的好處是 可以適應不同的平台 如果你是用window系統的話不建議用靜態編譯 因為這樣會使你的代碼量增大
動態編譯就是不把庫函數編譯到你的程序里

❾ 有什麼動態編譯java源代碼的框架

可以的,我說說大概思路,很簡單,你自己具體實現吧,把代碼寫給你沒意義的:

  1. 將你這段字元串輸出到一個文件里,用Java類文件的方式命名。

  2. 2.調用外部javac命令將該文件編譯。

  3. 3.用類載入器(ClassLoad)動態載入新的class文件並用Class.forName()注冊該類,然後就可以正常使用了。

  4. 上面的每一步都能在中找到實現方法,自己發揮吧。

❿ java編譯動態生成的類提示缺少包.類

這種情況,在A中,不可能import引用B相關的,要全部使用反射調用B類的屬性或方法。

閱讀全文

與動態編譯文件類型相關的資料

熱點內容
pcl源碼目錄 瀏覽:964
python分類數據轉換 瀏覽:103
wordpdf不能復制 瀏覽:958
快捷方式參數命令 瀏覽:109
cmd命令復制粘貼文件 瀏覽:580
ug實體快速修剪的命令是什麼 瀏覽:118
軟體工程對演算法的要求 瀏覽:931
元史pdf 瀏覽:93
如何讓伺服器卡爆不用tnt 瀏覽:797
兵器pdf 瀏覽:923
雲伺服器怎麼限制cpu 瀏覽:166
學信網用的什麼app 瀏覽:878
linux重啟命令apache 瀏覽:753
半夜解壓有什麼壞處 瀏覽:426
linux代理命令 瀏覽:639
調用tasking的編譯器編譯 瀏覽:294
青檸app是什麼 瀏覽:868
linuxapachephp56 瀏覽:397
安卓手機如何打開eng文件 瀏覽:24
看拉丁電視都用什麼app好 瀏覽:781