Java 如何使用gcj单独编译文件?
我使用gcj(Cygwin版本)编译了2个java文件 $gcj——版本 gcj(GCC)3.4.4(cygming special,gdc 0.12,使用dmd 0.125) 版权所有(C)2004免费软件基金会。 这是自由软件;有关复制条件,请参见源。没有 担保甚至不是为了适销性或适合某一特定目的 以下是我的两个java文件: $cat MyClass.javaJava 如何使用gcj单独编译文件?,java,compiler-construction,gcj,Java,Compiler Construction,Gcj,我使用gcj(Cygwin版本)编译了2个java文件 $gcj——版本 gcj(GCC)3.4.4(cygming special,gdc 0.12,使用dmd 0.125) 版权所有(C)2004免费软件基金会。 这是自由软件;有关复制条件,请参见源。没有 担保甚至不是为了适销性或适合某一特定目的 以下是我的两个java文件: $cat MyClass.java public class MyClass { public MyClass() { System.out
public class MyClass {
public MyClass() {
System.out.println("Hello, MyClass");
}
}
$cat HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
MyClass myclass = new MyClass();
System.out.println("Hello, World");
}
}
我能够在HelloWorld中使用
$ gcj.exe -o hello --main=HelloWorld --classpath=. HelloWorld.java MyClass.java
我想把它们分别编译成
gcj.exe -C MyClass.java
然后
gcj.exe --main=HelloWorld --classpath=. HelloWorld.java
问题是,我得到了
/tmp/ccKwa7F4.o: In function '_ZN10HelloWorld4mainEP6JArrayIPN4java4lang6StringEE':
/home/lucm/HelloWorld.java:3: undefined reference to `MyClass::class$'
/home/lucm/HelloWorld.java:3: undefined reference to `MyClass::MyClass()'
collect2: ld returned 1 exit status
编译到.o时,链接模型基本上类似于C。你必须编译所有的文件。因此,您要做的是将每个文件编译为.o并将结果链接:
gcj -c MyClass.java
gcj -c HelloWorld.java
gcj --main=HelloWorld MyClass.o HelloWorld.o
当引入二进制兼容性ABI时,gcj的更高版本也有一些例外。以上是使其工作的最基本方法。我强烈建议您停止使用这个过时的玩具,开始使用真正的Java版本。