Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GCJ Creates duplicate dummy symbol

Tags:

java

gcc

I'm trying to build a java application with gcj but getting the error below. It's been a while since I've used gcj (a year or so), so I may have forgot something non obvious but I'm pretty sure this is how I've always done it.

 multiple definition of `java resource .dummy'

gcj versions are 4.4.1 on Ubuntu and 4.3.4 on cygwin/windows XP and I'm building it with

  gcj --main=my.MainClass --classpath=my my/*java

Anyone seen this or know a workaround without installing an earlier version of gcj. If that is the way to do it does anyone know how to do that on cygwin or will I have to build it?

Here is a minimal test case that gives this error

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
like image 741
vickirk Avatar asked Dec 23 '22 04:12

vickirk


2 Answers

There are 2 bugs filed against this 42143 and 43302

The only reported solution is to compile to class files, then link the class files.

The following produces no errors:

gcj -I src -C src/A.java src/B.java
gcj -I src --main=A src/A.class src/B/class
like image 155
Devon_C_Miller Avatar answered Dec 26 '22 11:12

Devon_C_Miller


If you're building by compiling the .java files to .o files with gcj -c, you can also fix the problem by making the dummy symbols local with objcopy:

objcopy -L '_ZGr8_$_dummy' A.o

This works well with a Makefile -- just add to the %.o: %.java rule:

objcopy -L '_ZGr8_$$_dummy' $@    
like image 37
Chris Dodd Avatar answered Dec 26 '22 11:12

Chris Dodd