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
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
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' $@
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With