1.用gcj 3.x环境,由于cygwin使用utf-8环境,所以输出要使用utf-8
LANG=C.UTF-8
t.java(使用vi,UTF-8源代码)
public class t
{
public static void main(String[] args) {
try {
System.out.println( "xx: "+new String( "你好!中华人民共和国汉字测试 ".getBytes( "UTF-8")));
}
catch(Exception e) {
}
}
}
1)编译:
gcj-3 -c t.java
将生成t.o文件
2)连接
gcj-3 --main=t -o t t.o
将生成t.exe文件
3) 运行
./t
结果:
xx: 你好!中华人民共和国汉字测试
tg.java (使用GBK编码,用ultra-edit在windows下编辑)
public class tg
{
public static void main(String[] args) {
try {
System.out.println( "GBK: "+new String( "你好!中华人民共和国汉字测试 ".getBytes( "UTF-8")));
}
catch(Exception e) {
}
}
}
1)编译:
gcj-3 -c --encoding=GBK tg.java
将生成tg.o文件
2)连接
gcj-3 --main=tg -o tg tg.o
将生成t.exe文件
3) 运行
./tg
结果:
GBK: 你好!中华人民共和国汉字测试
当然,也可以直接用gcj-3 一次生成.exe
对于上面两个文件,分别用
gcj-3 --main=t -o t t.java
gcj-3 --encoding=GBK --main=tg -o tg tg.java
可以直接生成.exe 文件
2.使用gcj 4.x(我用4.5.3)环境,由于gcj 4.x的编译器有重大改进(其实还有很多BUG),使直接编译成.o有问题(google中搜一下),所以目前只能使用eclipse的ecj插件,但网上提供的最新ecj-4.5.jar插件经测试暂不支持cygwin的gcj,所以我使用ecj-4.3.jar或ecj-3.7.jar成功(可以在eclips官网上下载)。
以下以ecj-4.3.jar为例,可将ecj-4.3.jar放入当前目录(其它目录也可,只是这样最方便)
(注意,以上两个版本不支持gij-3版本)
同样是上面的t.java
1)编译
当前我的gij版本为4.5.3,它可用gij-4或直接用gij
gij -jar ecj-4.3.jar -encoding utf-8 t.java
它将生成t.class,(用其它任何encoding都无法编译)但要注意的是,该class的输出汉字不支持windows下的java(尽管我的win7_64bit+jre 1.6.0_27_64bit已支持utf-8,上面的exe输出就是utf-8的)
若要在win7下正常输出汉字,必须改
System.out.println( "xx: "+new String( "你好!中华人民共和国汉字测试 ".getBytes( "UTF-8")));
为
System.out.println( "xx: "+new String( "你好!中华人民共和国汉字测试 ".getBytes( "GBK")));
或直接写
System.out.println( "你好!中华人民共和国汉字测试 ");
而对于上面的tg.java,按理可用
gij -jar ecj-4.3.jar -encoding GBK tg.java
但编译无法通过,反而同样用
gij -jar ecj-4.3.jar -encoding utf-8 tg.java
或直接用
gij -jar ecj-4.3.jar tg.java
可以编译通过,但无论改输出的编码,在win7下都无法正确输出汉字,也就是说,要使.class正确在win7下输出汉字,源文件必须为utf-8且必须用GBK输出。
2)连接
经多次测试,用gij-4编译生成的.class,无论输入或输出是何种代码,用gcj 4.x生成的.exe都不支持汉字,它的输出只是ascii码,所以,要正确输出汉字,暂时只能放弃gcj 4.x
仍用 gcj-3 ,也只能用上面的t.java(即,源文件必须为utf-8,且必须用getBytes转成utf-8码输出)
命令方式:
gcj-3 --main=t -o t t.class
综上所述,对于cygwin下的java,在汉字环境下,如果要生成.exe,最好使用gcj 3.x,而对于英文就无所谓了。
面要生成.class,只能使用gij 4.x版本(其它的ecj版本未测试)
由于cygwin的gcj 4.x版本网上用人很少,以上只是我个人的测试结果。