[求助]有關 compile 成 .exe 的疑問 [已解決]

Home Home
引用 | 編輯 PeterPan
2005-01-09 13:42
樓主
推文 x0
請問寫好的 .java 檔案,要如何編譯成 native code 的 ..

訪客只能看到部份內容,免費 加入會員



獻花 x0
引用 | 編輯 codeboy
2005-01-09 20:32
1樓
  
我記得Jbuilder 有這個選項
可將必要的連結檔跟code都compile 進去變exe檔~ 表情

獻花 x0
引用 | 編輯 PeterPan
2005-01-09 21:08
2樓
  
下面是引用codeboy於2005-01-9 20:32發表的 :
我記得Jbuilder 有這個選項
可將必要的連結檔跟code都compile 進去變exe檔~ 表情
請問那個選項是把JVM包進去的意思嗎???
我幫朋友寫的程式希望能不需要JVM就能在他的電腦跑,不知道行不行,找好多地方都沒有答案 表情

獻花 x0
引用 | 編輯 codeboy
2005-01-09 22:22
3樓
  
Jbuilder 確定是可以的~
剛剛看了一下相關的問題~

用JSmooth去包成exe比較快...而且又可以放icon
http://jsmooth.sourceforge.net/

去試試看吧~我還沒試~晚點來試試~ 表情

獻花 x0
引用 | 編輯 PeterPan
2005-01-09 22:37
4樓
  
下面是引用codeboy於2005-01-9 22:22發表的 :
Jbuilder 確定是可以的~
剛剛看了一下相關的問題~

用JSmooth去包成exe比較快...而且又可以放icon
http://jsmooth.sourceforge.net/
.......
感謝版主,不過我就是用JSmooth0.97在試驗的,試了好多次&所有選項都沒有辦法達到:包好以後傳到別台沒有JVM的XP直接執行。
也許是我太笨沒有抓到訣竅吧..,繼續用力的撞... 表情 阿,是try才對.

獻花 x0
引用 | 編輯 codeboy
2005-01-10 00:54
5樓
  
原來如此...那如果成功後...麻煩請你也提供教學上來吧~
我再給你教學的獎勵雅幣~ 表情

獻花 x0
引用 | 編輯 panasonic732
2005-01-10 08:31
6樓
  
哈...發送的時候不小心多按了一次
ˊ.ˋa

獻花 x0
引用 | 編輯 Kuster
2005-01-10 13:47
7樓
  
就我個人印象,java在windows是沒有辦法compiler成為native code的
就算使用你說的那個東西,也只是弄成.exe檔,還是需要jvm才能跑
那根弄成一個.bat+.jar檔是一樣的意思......
印象中只有linux可以做得到,因為GNU有寫一個在linux上面編譯的工具:gcj
這可以把java編譯成linux上面的native code......
不過windows上面就沒有了

為什麼沒有?
因為java的主打就是透過jvm跨平台,要不然就沒特色沒搞頭了
所以沒有人去寫這種compiler,大家都直接換C寫......

如有錯誤請指教!!

獻花 x0
引用 | 編輯 PeterPan
2005-01-10 19:29
8樓
  
我是看到Java技術論壇Java技巧文件區裡面的一個討論:Java-->Exe。其中popcorny版主說到:
gcj好像不用jvm
而jsmooth要
但是你可以把jvm包裝在你的安裝檔中
(直接包就可以囉... JiaYun講的...我實驗也是對的)
所以你可以發布一個有vm版本的...一個沒vm版本的..
所以我就一直在找包裝的方法,但是拜了好久的google神都沒能問到步驟,自己試又試不出,殘念.....
不過那個站的某篇文章的確有人提到換成GCJ來compile就可以做到,而且它不只有for linux也有for Windows的版本,也許換成這個試就能成功。Kuster : thx a lot~~~
開始search gcj程式與教學,試成功的話我會PO上來地 表情

獻花 x0
引用 | 編輯 Kuster
2005-01-11 21:35
9樓
  
gcj有for windows的嗎....?
這我倒是沒看過,我實際去GUN的網站上面查,也沒查到過有windows的相關資料......
如果能找到當然好,不過有這個必要嗎......?
我目前是想不到什麼理由去把java compiler成為windows的native code
嵌入式系統上面幾乎都是跑linux,又因為嵌入式系統的平台速度通常挺慢的,所以在這十後使用gci讓速度得以提升,這是我目前看到的應用層,其他我就沒看過了.......

我之前也找過原因也是想要跨平台,因為那時候我不知道C是compiler時期跨平台,自從知道C是compiler時期跨平台後,我對java就抱持著相當的懷疑態度了.......
因為效率絕對跟C沒的比,我個人是比較強調效率啦.......
我對你想要找這個東西的用意挺有興趣的~~
能否聊聊你要找這個東西的原因呢~~ 表情

獻花 x0
引用 | 編輯 PeterPan
2005-01-12 12:18
10樓
  
GNU我去找也沒有 表情
之前我去MingW GCC\GCJ的網頁有看到過一個檔案:gcc34-20031123.zip,但是下載的連結始終回報說 404 Not found...   orz
網頁中的一段話:This page is a temporary holding spot for my build of the mingw32 target of a CVS snapshot of certain GCC/GCJ branches. Here, you can download a Win32 (MingW) build of GCC, which can compile C, C++ and Java code into native Windows executables!
那時候我就想說,以後我寫好的Java code不曉得能不能做到只寫一次,不需要修改code就能使用GCC compile成各個OS平台的執行檔,而且各個OS都不需要JRE,大大降低了開發穩定強固程式碼的時間與複雜度。因為C\C++的跨平台機制還需要變更程式中,和平台相關的程式碼,想到還要一次又一次的除蟲,這種可移植性還是忘了它吧。PS:所以C稱為「可攜性高」比較合適。
but,現在MingW拿掉了上面那個檔案,變成:gcc34-20040607.tar.bz2;以及升級版本:gcc40-20040925.tar.bz2     Orz
不知道是不是因為GNU度爛M$的關係,還是不想讓Java的Programmer寫出來的程式都只變成.exe,讓M$佔到便宜,畢竟現在OS的主流還是窗戶
關於效率部份,Java剛開始為了達到跨平台而使用JVM,的確比native code的C\C++慢上10%~15%,但是在新版的JDK 1.4已經把速度逼近到 <5%,不知道快要release的5.0是否能更快。而且Java並不強調它的速度,而強調的是Write Once, Run Anywhere。如果注重效率且為單一OS視窗平台的話,那當然還是用C囉。
個人意見必有謬誤,請不吝賜教 表情

獻花 x0
引用 | 編輯 PeterPan
2005-01-13 16:33
11樓
  
↓以下是拙者在XP底下試驗 gcj 的步驟與心得↓

首先到 這裡 下載GCJ的IDE,我抓的是:gcc34-20040607.tar.bz2 (45 819 475 bytes)

然後使用WINRAR解壓縮,出現一個目錄:thisiscool-gcc
將此目錄搬移到想放的地方,我擺到 D:\Program Files\ 底下
然後設定兩個環境變數:TOP=%InstallPath%\thisiscool-gcc\gcc-3.4;PATH加上→%InstallPath%\thisiscool-gcc\gcc-3.4\bin; ﹝Attention!拙者這邊的%InstallPath%是D:\Program Files,實際的
%InstallPath%請輸入您放置IDE的目錄﹞

接下來,我寫了一支Test.java,內容為↓
public class Test{
  public static void main(String[] args){
    System.out.println("Hello,world.");
    System.out.println("My name is PeterPan,and I often ask very very very unwise question.");
  }
}

然後把它移動到D:\TMP,在命令提示字元中輸入↓
D:\TMP>gcj -c -O3 Test.java
D:\TMP>gcj Test.o --main=Test -o go.exe -O3

之後把 go.exe 丟到我妹的電腦上,確定OS沒有安裝JRE,在命令提示字元下執行 go.exe,順利出現表情
Hello,world.
My name is PeterPan,and I often ask very very very unwise question.

接著我試驗另一支有import java.io.*的程式,是我幫朋友寫的homework,並且有print中文字,雖然copy到我妹的電腦能夠正常執行,但遺憾的是,無法顯示中文,會變成亂碼↓
?????J????????????1.???? 2.?T???? 3.?|???????G2
?????J?T???????@???????????q?????r?G123
?????J?T???????G???????????q?????r?G123
?????J?T???????T???????????q?????r?G123
???T???????P???G369.0 cm ?F ???n?G6551.049166927386 cm2

這時候我想,也許是因為3.4版的還不支援Unicode。但是我抓gcc40-20040925.tar.bz2,用4.0版的compile,還是亂碼,也許是我參數下錯,或環境沒設定好,或是還不支援,who knows 表情,等有時間再來試驗吧。

我真是白癡...... 之前居然以為用tar包的檔案只能在Linux底下跑,不能在視窗底下執行.......
表情表情笨阿!

獻花 x0
引用 | 編輯 0955625410
2005-03-23 22:05
12樓
  
他是不是運用到GUI時候不能包裝阿.....我把HELLOWORD拿來包裝可以= =但是把我寫的即時通包裝就不行= =怪怪低QQ 還給我說一堆錯誤....氣死我了ˋˊ

獻花 x0
引用 | 編輯 PeterPan
2005-03-23 22:48
13樓
  
下面是引用0955625410於2005-03-23 22:05發表的 :
他是不是運用到GUI時候不能包裝阿.....我把HELLOWORD拿來包裝可以= =但是把我寫的即時通包裝就不行= =怪怪低QQ 還給我說一堆錯誤....氣死我了ˋˊ
別生氣,因為它還沒有百分百支援SWT:
http://www.thisiscool.com/gcc_mingw.htm#gcj40

To get started,

Download the above zipfile and unzip it somewhere. I chose C:\Program Files and, for illustration purposes, will assume you did too in the remainder of this document.
Either put C:\Program Files\thisiscool-gcc\gcc-4.0\bin in your global path, or ensure that it is in your path when you do a build.
For SWT applications, you'll need to move C:\Program Files\thisiscool-gcc\gcc-4.0\i686-pc-mingw32\lib\swt-win32-3054.dll to somewhere your built executable can see it.
For dynamic builds, rename one of libgcj.dll.origdll or libgcj.dll.guidll (these are both in C:\Program Files\thisiscool-gcc\gcc-4.0\i686-pc-mingw32\lib) to libgcj.dll and put this somewhere where the built executables can see it.
The bundle includes example applications. See the ReadMe files in thisiscool-gcc and thisiscool-gcc/examples for details.


獻花 x0