我正在尝试使用gcj构建一个java应用程序但是收到以下错误。自从我使用gcj(一年左右)以来已经有一段时间了,所以我可能已经忘记了一些不明显的东西,但我很确定这就是我一直以来的做法。
multiple definition of `java resource .dummy'
gcj版本在Ubuntu上是4.4.1,在cygwin / windows XP上是4.3.4,我用
构建它 gcj --main=my.MainClass --classpath=my my/*java
任何人都看过这个或者在没有安装早期版本的gcj的情况下知道解决方法。如果这样做的话,有人知道如何在cygwin上做到这一点,还是我必须建立它?
这是一个给出此错误的最小测试用例
public class A {
public static void main(String[] args) {
System.out.println(new B());
}
}
public class B {
public String toString() {
return "Hello";
}
}
gcj --main=A src/A.java src/B.java
答案 0 :(得分:5)
唯一报告的解决方案是编译到类文件,然后链接类文件。
以下不会产生错误:
gcj -I src -C src/A.java src/B.java
gcj -I src --main=A src/A.class src/B/class
答案 1 :(得分:3)
如果您是通过将 .java 文件编译为带有gcj -c
的 .o 文件来构建的,那么您还可以通过制作虚拟符号来解决问题本地的objcopy:
objcopy -L '_ZGr8_$_dummy' A.o
这适用于Makefile - 只需添加到%.o: %.java
规则:
objcopy -L '_ZGr8_$$_dummy' $@
答案 2 :(得分:2)
至少对于某些版本的gcj,使用-o显式指定输出可执行文件将使其工作:
gcj --main = my.MainClass -o myexe --classpath = my my / * java
我对此行为没有任何解释。
答案 3 :(得分:1)
不是解决上述问题的方法,而是编译为本机代码的方法: 1.使用sun / openjdk编译jar存档 2.使用
将jar转换为可执行文件gcj project.jar --main=package.name.ClassWithMainMethod