Java 如何使用gcj单独编译文件?

Java 如何使用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

我使用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.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版本。