如何在Java中使用GCC?

Jav*_*yer 9 java gcc cygwin

我已经在Windows 7上安装了CYGWIN仿真终端以便使用GCC,我知道它可以编译太多语言,我可以正确使用它但不知道如何用它来编译java文件?

Moa*_*sry 7

你读过这本手册了吗? gnu java

他们有一个名为gcj的编译器,专用于Java语言.


Tel*_*per 6

如果有人在2016年9月30日之后阅读此问题:

GCC 7发行说明中可以看出,用于Java的GNU编译器(GCJ)已经停产,不再属于GNU编译器集合(GCC)。


Cir*_*四事件 5

GCC Java 编译器

曾几何时,存在一个 GCC Java 前端,但它已被弃用。

值得注意的是,该软件包不再存在于 Ubuntu 18.04 中,但它存在于 Ubuntu 16.04 中

弃用原因:Java JRE 与 GCJ

不过为了好玩,我们可以在旧的 Docker 容器中试用这个历史软件。但是 TODO:我今天无法在 Ubuntu 16.04 或 14.04 来宾上使用它,而且我懒得调试它。但我发誓,当我第一次回答这个问题时,我至少做过一次。

主程序

public class Main {
    public static void main(String args[]) {
        System.out.println("hello world");
    }
}
Run Code Online (Sandbox Code Playgroud)

编译并运行:

sudo apt-get install gcj-4.8 libgcj16-dev
gcj-4.8 -c Main.java
gcj --main=Main -o Main Main.o
./Main
Run Code Online (Sandbox Code Playgroud)

编译失败:

gcj-4.8: error: libgcj.spec: No such file or directory
Run Code Online (Sandbox Code Playgroud)

相关:https : //bugs.launchpad.net/ubuntu/+source/gcj-4.0/+bug/24906

安卓艺术

从 Android 5 开始,Android 一直在使用“ART 运行时”,它会提前在应用程序中编译 Java:https : //en.wikipedia.org/wiki/Android_Runtime

因此,如果您今天要在 2019 年研究 Java 到二进制编译,那就是您应该看的地方。

与 Android 中的其他一切一样,不幸的是,在没有 Android 其他膨胀的情况下运行 ART 可能是不可能的或疯狂的。

这里我简单拆解了一些预编译的Android应用程序:Java中的native关键字是干什么用的?表明它们实际上已编译为共享对象。