如何使用GCC编译Java代码?

16

我已经在Windows 7上安装了CYGWIN模拟器终端,以便使用GCC,我知道它可以编译很多语言,我可以正确地使用C,但不知道如何使用它来编译Java文件?


总结以下答案:如果您想编译Java,请使用Oracle编译器javac或内置编译器之一,如Eclipse或Netbeans。这些编译器往往比gcj维护得更好。 - Jochen
@Jochen是正确的。自从GCC 7(尚未发布)以来,gcj已经从GCC中删除了。 - kaartic
5个回答

25

如果有任何人在2016年9月30日之后看到这个问题:

Java GNU编译器(GCJ)已经停止开发,不再是GNU编译器集合(GCC)的一部分。详情请参阅GCC 7 版本发布说明


9

你有没有阅读手册?GNU Java 有一个专门用于Java语言的编译器,名为gcj。


7

GCC Java编译器

曾经存在过一个GCC Java前端,但已被弃用。

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

为什么它被弃用:Java JRE vs GCJ

然而,我们可以在旧的Docker容器中尝试运行这个历史悠久的软件,只是TODO:我今天无法在Ubuntu 16.04或14.04上使其工作,并且我懒得调试。但我发誓,当我第一次回答这个问题时,我至少成功过一次。

Main.java

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

编译并运行:

sudo apt-get install gcj-4.8 libgcj16-dev
gcj-4.8 -c Main.java
gcj --main=Main -o Main Main.o
./Main

编译失败,出现以下错误信息:
gcj-4.8: error: libgcj.spec: No such file or directory

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

Android ART

从 Android 5 开始,Android 使用了“ART runtime”,预先编译应用程序中的 Java 代码:https://en.wikipedia.org/wiki/Android_Runtime

因此,如果您想要了解今天2019年的Java到二进制编译过程,那么您应该去了解这个。

像Android中的其他所有东西一样,如果没有其余的Android系统,运行ART可能会很难或不可行。

在这里,我简要介绍了一些预编译的Android应用程序:What is the native keyword in Java for?,显示它们实际上是编译为共享对象。


2
除了已接受的答案外,我建议不要使用GCC编译Java,可以参考以下文章:Java JRE vs GCJ。Javac是更好的选择!但如果您正在使用GCC将Java编译为本地代码,则仍然值得一看(也许)。在我看来,GCJ已经死亡(最后一条新闻更新是在2009年!https://gcc.gnu.org/java/index.html

2

GCC是一个前端,用于编译多种语言(GNU Pascal,Mercury,Cobol,GNU Modula-2,Modula-3,GHDL,PL/1,GCC统一并行C...)。

目前,主要的GCC发行版包含了C(gcc),C++(g++),Objective C,Fortran,Java(GCJ),Ada(GNAT)和Go的前端。

GCJ相当于javac,但是你可以看到最新消息是2009年的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接