如何用gcj单独编译文件?

时间:2012-10-31 19:57:49

标签: java compiler-construction gcj

我使用gcj(Cygwin版本)编译2个java文件

$ gcj --version gcj(GCC)3.4.4(cygming special,gdc 0.12,使用dmd 0.125) 版权所有(C)2004 Free Software Foundation,Inc。 这是免费软件;查看复制条件的来源。没有 保证;甚至不适用于适销性或特定用途的适用性。

这是我的2个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

1 个答案:

答案 0 :(得分:3)

编译为.o时,链接模型基本上是C类。你必须编译所有文件。那么你要做的就是将每个编译成.o并链接结果:

gcj -c MyClass.java
gcj -c HelloWorld.java
gcj --main=HelloWorld MyClass.o HelloWorld.o

当引入二进制兼容性ABI时,此规则与gcj的更高版本有一些例外。以上是使其发挥作用的最基本方法。