我使用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
答案 0 :(得分:3)
编译为.o时,链接模型基本上是C类。你必须编译所有文件。那么你要做的就是将每个编译成.o并链接结果:
gcj -c MyClass.java
gcj -c HelloWorld.java
gcj --main=HelloWorld MyClass.o HelloWorld.o
当引入二进制兼容性ABI时,此规则与gcj的更高版本有一些例外。以上是使其发挥作用的最基本方法。