免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1805 | 回复: 0
打印 上一主题 下一主题

用GCJ编译Java源文件成脱离JRE的exe可执行文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-27 11:26 |只看该作者 |倒序浏览


创建本机跨平台 GUI 应用程序(重述): 在 Windows 上安装 GCJ 3.2





  






在本文中, 重述了该主题并讨论了对 Windows、GNOME 和 SWT 2.0 的支持。这一次,他使用 Ant 来演示如何自动构建您的本机应用程序,然后演示了如何将所有这些集成到 Eclipse IDE。
遵循以下指示信息,在您的环境中安装 GCJ 3.2。尽管 GCJ 3.3 可用于 Windows,但我还未对其进行充分测试。除非您喜欢冒险,否则我建议您使用 GCJ 3.2。
  • 首先,需要一个解压缩 tar 文件的程序。如果没有,可以在本文的源代码(请参阅
    参考资料
    )中获取必要的程序。将 Utilities\win32 目录下的文件复制到系统 PATH 中的某个目录下。
  • 接下来,将以下所有文件下载到这一目录。注:该目录名或其任何父目录名都不应该包含空格:

  • 在命令提示符下,切换至刚才下载文件所在的目录,然后执行以下命令:
  • gunzip *.gz
  • tar -xvf binutils-2.13.90-20021006-2.tar
  • tar -xvf gcc-3.2-core-20020817-1.tar
  • tar -xvf mingw-runtime-2.2.tar
  • tar -xvf w32api-2.0.tar
  • tar -xvf gcj-3.2-20021210-1.tar 忽略任何您可能遇到的与文件许可权相关的警告。
  • 这些已解压缩的文件中将有一个 bin 文件夹,该文件夹下包含所有的可执行文件(譬如 gcj.exe)。请确保将此文件夹添加到您的系统 PATH。
  • 在命令提示符下,输入 gcj。如果所有内容都配置正确,则应该看到 gcj: no input files 。如果得到编译器找不到 libgcj.spec 的错误报告,那么请确保步骤 2中的目录名没有包含空格。此外,在任何父目录名中也不应该有空格。



    用GCJ编译Java源文件成脱离JRE的exe可执行文件
    http://iamin.blogdriver.com/iamin/1159221.html
    一、下载GCJ
    到 http://www.thisiscool.com/gcc_mingw.htm 可以看到你有个版本
    GCC/GCJ 3.4
    GCC/GCJ 4.02
    不管三七四十八,都下载下来先:)
    二、解压检测,先来测试高版本的GCJ4.02
    比如:E:\OpenSource\GCC4,可以看到有个gcc-4.0的目录
    把 E:\OpenSource\GCC4\gcc-4.0\bin 这个目录加入到你的系统环境变量PATH当中
    然后运行 gcj --help 可以看到帮助
    再运行 gcj -v 可以看到当前的版本,如:
    Thread model: win32
    gcc version 4.0.2
    这样说明你的准备环境没有问题了。
    三、新建一个Java文件,如HelloGCJ.java文件
    public class HelloGCJ
    {
    public static void main(String[] args)
    {
       System.out.println("Hello GCJ!");
    }
    }
    四、新建一个批处理文件J2E.bat,内容如下,放在bin目录下,或系统目录下
    gcj -c %1.java -o %1.o
    gcj --main=%1 -o %1 %1.o
    %1
    五、编译运行
    J2E HelloGCJ
    可以看到后成了HelloGCJ.o和HelloGCJ.exe文件,不过这个文件巨大,有8,883,481字节,比较恐怖:)用ASPack压缩一下,压缩率可以达到22%,剩下1,984,512字节,ASPack的压缩力倒是很强:)
    ========================================================================
    现在开始测试GCJ 3.4
    第一步,已经下载了
    第二步,
    解压到:E:\OpenSource\GCC3,可以看到有个gcc-3.4的目录
    把 E:\OpenSource\GCC3\gcc-3.4\bin 这个目录加入到你的系统环境变量PATH当中
    然后运行 gcj --help 可以看到帮助
    再运行 gcj -v 可以看到当前的版本,如:
    Thread model: win32
    gcc version 3.4.0 20040316 (prerelease)
    这样说明你的准备环境没有问题了。
    第三步,一样,有了
    第四步,一样,有了
    第五步、编译运行
    J2E HelloGCJ
    同样是可以看到后成了HelloGCJ.o和HelloGCJ.exe文件,不过这个文件比刚才用4.02编译的要小很多,才5,167,559字节,我们再用ASPack压缩一下,压缩率可以达到17%,剩下898,560字节,更小了,小了一大半,但是要检测一下看有没有问题才行。
    ========================================================================
    六、确认独立于JRE
    为了确认是独立于JRE的,最好放到一个没有任何Java的环境下去跑一下,我有个Win98SE的虚拟机,这样一来就可以确认了
    或者先这样来测试一下
    PATH=;
    这样是把PATH清空,当然无论怎么清空,在Windows下面还是会去找Windows的系统可执行目录的:)
    set JAVA_HOME=
    把JAVA_HOME也清空,然后再运行一下HelloGCJ.exe文件看看是否可以。
    结果:在我的Windows 2000 ADS上面用4.02或3.4编译的或者编译后并ASPack过的都可以运行。
    但是,在Windows 98 SE上面用4.02编译的或者编译后并ASPack过的都不能够运行!!!
    所以,大家要用哪个版本自己选择。
    结束语:这是最简单的一个测试,关于AWT、Swing、SWT、中文问题、线程、文件、IO等等可以参见附带的Samples
    要运行Samples,先要找个下载make,并解压后把make.exe扔到bin目录下,然后打开Makefile文件
    把是Unix/Linux下面的一些编译指令去掉,比如:rm、chmod、find之类的,等等,如第96行后面的 && chmod +x hang_posix.exe去掉
    最后在Samples进行make一下就可以编译Samples了,还是要自己修改一下的,要不然编译还是有问题出现。
    不过,要看一下ReadMe.txt文件哦,并不是所有的都能够运行:(
    Not all of the samples are used in the testsuite. The GUI samples are built, but not executed.
    ========================================================================
    上面我们下载的都是全打成包的文件,如果你想单独下载的话,可以直接到以下地址去下载
    http://prdownloads.sf.net/mingw/
    建议按时间排序一下,然后下载以下所需的包的最新的稳定版本。
    binutils
    gcc-core
    gcc-java
    iconv
    make
    mingw-runtime
    w32api
    下载后按照上述顺序将其解压到相同的目录,例如 E:\OpenSource\GCC\
    然后将 E:\OpenSource\GCC\bin 加入 PATH 环境变量中
    运行 gcj --help 可以看到帮助
    再运行 gcj -v 可以看到当前的版本
    出现版本信息说明你的准备环境没有问题了。
    不过,千万注意了,也要下载 iconv 要不然根本就不行,而且编译后的.exe文件也必须要这个 iconv.dll 或 libiconv-2.dll 动态链接库的
    如果下载 iconv-1.9.1.win32.zip 的话是 iconv.dll ,
    下载 libiconv-1.8.0-2003.02.01-1.exe 安装的话是 libiconv-2.dll
    iconv是一个语言转换工具。
    我尝试过3.4.2、3.4.5版本的,想脱离 iconv 均没有成功:(,有成功的指点一下。





    HelloGCJ.exe
    (626.0 K)
    1.很古老的版本是可以脱离iconv ,但那样对UTF-8的支持就有问题了,更别指望中文了,所以放弃那个想法吧。
    2.我压缩编译好的Exe的方法是 strip -s HelloGCJ.exe,然后Upx --best HelloGCJ.exe,这样压缩好的大小为:626 KB (641,024 字节)
    3.至于用UPX压缩后的版本是否能在Windows98下使用倒没有测试过,不过应该没有问题,因为开源的PDFCreator和一个共享软件(下载专利的)都使用过我用这种方式编译的程序,分别为PDFEncrypt和PDFMerger,使用GCJ+iText来实现的。
    我的网站上有一个新工具(免费),旋转PDF中每页的角度(支持90,180,270),有兴趣的可以看看,也是基于iText+Gcj


    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/20665/showart_206629.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP