GCJ Создает дублирующий фиктивный символ - PullRequest
4 голосов
/ 02 апреля 2010

Я пытаюсь собрать Java-приложение с помощью gcj, но получаю сообщение об ошибке ниже. Прошло много времени с тех пор, как я использовал gcj (год или около того), поэтому я, возможно, забыл что-то неочевидное, но я почти уверен, что так я всегда делал.

 multiple definition of `java resource .dummy'

Версии gcj: 4.4.1 в Ubuntu и 4.3.4 в cygwin / windows XP, и я собираю его с

  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 ]

5 голосов
/ 02 апреля 2010

Подано 2 ошибки против 42143 и 43302

Единственное решение, о котором сообщается, - это скомпилировать файлы классов, а затем связать файлы классов.

Следующие ошибки не выдаются:

gcj -I src -C src/A.java src/B.java
gcj -I src --main=A src/A.class src/B/class
3 голосов
/ 26 апреля 2010

Если вы строите путем компиляции файлов .java в .o файлов с gcj -c, вы также можете решить проблему, сделав фиктивные символы локальными с помощью objcopy:

objcopy -L '_ZGr8_$_dummy' A.o

Это хорошо работает с Makefile - просто добавьте к правилу %.o: %.java:

objcopy -L '_ZGr8_$$_dummy' $@    
2 голосов
/ 13 декабря 2011

По крайней мере с некоторой версией gcj, явно указав выходной исполняемый файл с помощью -o, он заработает:

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

У меня нет объяснения этому поведению.

1 голос
/ 10 декабря 2011

Не решение упомянутой проблемы, а способ компиляции в нативный код: 1. скомпилируйте jar-архив, используя sun / openjdk 2. конвертировать jar в исполняемый файл, используя

gcj project.jar --main=package.name.ClassWithMainMethod
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...