2008年10月10日星期五

<转>使用GCJ进行JAVA本地化编译

来源:蓝色冰点
使用GCJ进行JAVA本地化编译
前言:JET是个不错的选择,不过要收费而且还满贵的,试用版的会有一些试用的提示,很不爽,所以就另寻他法了,现在使用的是GUN的GCJ编译。
软件环境:(windows)
MinGW
libiconv(libiconv-1.8-1-lib.zip libiconv-1.8-1-bin.zip)
步骤:
安装MinGW
将libiconv解压缩到MinGW的安装目录
编写JAVA文件并执行
如:Test.java 试生成 Test.class 并测试运行效果
编译为本地文件
如:
必须先将用到的包编译一下,例如gcj -c MyLib.jar,会生成一个 MyLib.o的文件
然后用gcj --classpath=MyLib.jar -c Test.java编译,会生成一个Test.o的文件,
注:如果MyLib.jar中引用到其他包的话 必须先将用到的包编译一下,例如gcj --classpath=MyLib2.jar -c MyLib2.jar 并以此类推。(调用的包的深度比较大的话,很麻烦)
连接为可执行的文件
如:gcj --main=Test --classpath=MyLib.jar -o TestExe Test.class MyLib.o
然后就可以生成一个叫TestExe.exe的文件了(引用比较多的话体积会比较大,运行的效率还不错)

这些只是一个简单的例子,还有很多的用处有待于以后使用中的慢慢发觉。






Ps:他这方法应该说是很通用的,我在linux下也顺利编译了下,发现编译后的文件比源文件大很多,而不像class那样和java文件大小差不多。而且,cat *.class也可以看到一些源代码的变量声明啥的,总之觉得编译成class文件是比较简单的。我的探索如下:

shenscu@debian-linux:~/tcp/JavaIM111$ ls
ClientThread.java JavaIM.java ServerThread.java
shenscu@debian-linux:~/tcp/JavaIM111$ gcj -c JavaIM.jar
gcj: JavaIM.jar:没有该文件或目录
gcj: 没有输入文件
shenscu@debian-linux:~/tcp/JavaIM111$ gcj -c JavaIM.java
shenscu@debian-linux:~/tcp/JavaIM111$ ls
ClientThread.java JavaIM.java JavaIM.o ServerThread.java
shenscu@debian-linux:~/tcp/JavaIM111$ gcj -c *.java
shenscu@debian-linux:~/tcp/JavaIM111$ ls
ClientThread.java JavaIM.java ServerThread.java
ClientThread.o JavaIM.o ServerThread.o
shenscu@debian-linux:~/tcp/JavaIM111$ gcj -o JavaIM *.o
/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld 返回 1
shenscu@debian-linux:~/tcp/JavaIM111$ gcj --main=JavaIM -o JavaIM *.o
shenscu@debian-linux:~/tcp/JavaIM111$ ls
ClientThread.java JavaIM JavaIM.o ServerThread.o
ClientThread.o JavaIM.java ServerThread.java
shenscu@debian-linux:~/tcp/JavaIM111$ ./JavaIM
Input you nickname:


shenscu@debian-linux:~/tcp/JavaIM111$ emacs JavaIM
shenscu@debian-linux:~/tcp/JavaIM111$ javac *.java
shenscu@debian-linux:~/tcp/JavaIM111$ ls
ClientThread.class JavaIM JavaIM.o ServerThread.o
ClientThread.java JavaIM.class ServerThread.class
ClientThread.o JavaIM.java ServerThread.java
shenscu@debian-linux:~/tcp/JavaIM111$ ls -l
总用量 92
-rw-r--r-- 1 shenscu shenscu 1673 2008-10-11 12:45 ClientThread.class
-rw-r--r-- 1 shenscu shenscu 899 2008-10-11 12:10 ClientThread.java
-rw-r--r-- 1 shenscu shenscu 10220 2008-10-11 12:43 ClientThread.o
-rwxr-xr-x 1 shenscu shenscu 32960 2008-10-11 12:44 JavaIM
-rw-r--r-- 1 shenscu shenscu 601 2008-10-11 12:45 JavaIM.class
-rw-r--r-- 1 shenscu shenscu 630 2008-10-11 12:10 JavaIM.java
-rw-r--r-- 1 shenscu shenscu 6724 2008-10-11 12:43 JavaIM.o
-rw-r--r-- 1 shenscu shenscu 1083 2008-10-11 12:45 ServerThread.class
-rw-r--r-- 1 shenscu shenscu 575 2008-10-11 12:10 ServerThread.java
-rw-r--r-- 1 shenscu shenscu 8628 2008-10-11 12:43 ServerThread.o
shenscu@debian-linux:~/tcp/JavaIM111$ jar *.class
jar: invalid option -- l
Try `jar --help' for more information.
shenscu@debian-linux:~/tcp/JavaIM111$ jar *.class -o 11
jar: invalid option -- l
Try `jar --help' for more information.
shenscu@debian-linux:~/tcp/JavaIM111$ jar -o 11 *.class
jar: invalid option -- o
Try `jar --help' for more information.
shenscu@debian-linux:~/tcp/JavaIM111$ jar -c 11 *.class
PK
�eK9 META-INF/PK
�eK9F�2((META-INF/MANIFEST.MFManifest-Version: 1.0
Created-By: 0.95

11: No such file or directory
Error adding 11 to jar archive!
shenscu@debian-linux:~/tcp/JavaIM111$ clear

shenscu@debian-linux:~/tcp/JavaIM111$ ls
ClientThread.class JavaIM JavaIM.o ServerThread.o
ClientThread.java JavaIM.class ServerThread.class
ClientThread.o JavaIM.java ServerThread.java
shenscu@debian-linux:~/tcp/JavaIM111$ ls -l
总用量 92
-rw-r--r-- 1 shenscu shenscu 1673 2008-10-11 12:45 ClientThread.class
-rw-r--r-- 1 shenscu shenscu 899 2008-10-11 12:10 ClientThread.java
-rw-r--r-- 1 shenscu shenscu 10220 2008-10-11 12:43 ClientThread.o
-rwxr-xr-x 1 shenscu shenscu 32960 2008-10-11 12:44 JavaIM
-rw-r--r-- 1 shenscu shenscu 601 2008-10-11 12:45 JavaIM.class
-rw-r--r-- 1 shenscu shenscu 630 2008-10-11 12:10 JavaIM.java
-rw-r--r-- 1 shenscu shenscu 6724 2008-10-11 12:43 JavaIM.o
-rw-r--r-- 1 shenscu shenscu 1083 2008-10-11 12:45 ServerThread.class
-rw-r--r-- 1 shenscu shenscu 575 2008-10-11 12:10 ServerThread.java
-rw-r--r-- 1 shenscu shenscu 8628 2008-10-11 12:43 ServerThread.o

没有评论: