我已经在Windows 7上安装了CYGWIN仿真终端以便使用GCC,我知道它可以编译太多语言,我可以正确使用它但不知道如何用它来编译java文件?
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关键字是干什么用的?表明它们实际上已编译为共享对象。