zoukankan      html  css  js  c++  java
  • 小伙伴惊呆了!这个编译器可以直接将Java源码编译为本地机器指令

    前言

    Write Once,Run Anywhere,一次编写,到处运行,我们再熟悉不过了,尽管都知道Java源码要先通过javac编译为字节码文件,然后由JVM去运行,但是有些选手就想把他编译成为exe,当然这也是可以的,虽然我还没有正真的尝试过,但是做到这样也很简单,原理就是把jre和jar一起打包,存放在exe文件中,然后运行exe的时候,释放jre和jar文件,接着就可以调用java -jar去执行这个jar包,但是这样做的话,最终的exe体积就会变的非常大,并且没有脱离JVM环境。

    那还有没有其他办法,当然有了,就是通过GCJ,全称叫GNU Compiler for the Java Programming Language,这个编译器可以直接将java文件编译为本地机器指令,这样的话Java程序就脱离了JVM环境独立运行,还可以将java文件编译为字节码文件,GCJ的实现虽然不完整,但是,他支持大多数的Java功能,包括集合,网络,反射,序列化,JNI和RMI。

    GCJ

    安装

    下面以Linux为例,安装命令如下:

    sudo apt-get install  gcj-jdk
    

    生成可执行文件

    在编写一个Java Hello World文件:

    public class Test {
        public static void main(String... a‮) {
            System.out.println("HelloWorld");
        }
    }
    

    下面分为两步,编译和链接,命令如下:

    gcj -c Test.java  #编译为Hello.o
    
    gcj --main=Test -o Test Test.o ##将Hello.o链接到Hello
    

    GCJ编译器首先会更具java源码编译出一个后缀为.o的对象文件,这个文件的内容就是可以直接被CPU识别执行的本地机器指令,然后GCJ在更具这个对象文件进行链接,生成一个可执行文件。

    其实也可以通过一条命令来完成编译和链接,命令如下:

    gcj --main=Test -o Test Test.java
    

    --main=Test是告诉链接用哪一个类的main()方法做为可执行文件的入口。

    然后运行:

    ./Test 
    HelloWorld
    

    是不是惊呆了呢?但是最终大小还是有点大,16.1KB。

    生成java字节码文件

    -C 参数用来告诉GCJ编译成Java字节码文件,即生成一个class文件,运行的话就可以通过java命令来运行。

    
    gcj -C Test.java 
    
    java Test 
    
    HelloWorld
    
    

    编译Jar

    要把jar编译为可执行文件,首先就要通过IDE把项目打包成一个jar包,或者通过jar命令也可以,然后在进行编译和链接即可。

    jar cvf Test.jar *.class
    
    gcj -c Test.jar
    
    gcj --main=Test -o Test Test.o
    
    ./Test 
    

    虽然GCJ能把java源码编译为本地机器指令,但是貌似也没有多少人会这样做,首先体积也会变大,再者就是GCJ编译器默认只会对Java的基础类库提供支持,其他第三方GCJ编译器就无能为力。

  • 相关阅读:
    如何将自己编写的软件放在真机上运行
    多台Mac电脑使用一个apple开发者账号
    Xcode5最初级的教程
    利用NSIS软件制作C#安装包
    C#针对DataTable进行分页方法
    Json 的日期格式转换成DateTime
    FI & RI
    Rename a TFS Project Collection
    char、varchar、nchar、nvarchar的区别
    Migration from TF Service to TF Server with the TFS Integration Platform
  • 原文地址:https://www.cnblogs.com/HouXinLin/p/14366365.html
Copyright © 2011-2022 走看看