GCJ创建重复的虚拟符号

时间:2010-04-02 14:42:55

标签: java gcc

我正在尝试使用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

4 个答案:

答案 0 :(得分:5)

针对此4214343302

提交了2个错误

唯一报告的解决方案是编译到类文件,然后链接类文件。

以下不会产生错误:

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