2010-04-02 70 views
4

我試圖用gcj構建一個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 

回答

5

有2個漏洞對提交本4214343302

唯一的報告解決方案是編譯成class文件,然後鏈接類文件。

下不會產生錯誤:

gcj -I src -C src/A.java src/B.java 
gcj -I src --main=A src/A.class src/B/class 
+0

非常好,在cygwin和ubuntu上完美工作,謝謝 – vickirk 2010-04-03 08:36:58

3

如果你被文件編譯的.java到的.o文件gcj -c建築,你也可以通過將虛擬的符號解決問題當地有objcopy命令:

objcopy -L '_ZGr8_$_dummy' A.o 

這與一個Makefile效果很好 - 只需添加到%.o: %.java規則:

objcopy -L '_ZGr8_$$_dummy' [email protected]  
1

不是一個解決方案所提到的問題,而是一種方式來編譯爲本地代碼: 1.使用太陽/ OpenJDK的 2.轉換罐子使用

gcj project.jar --main=package.name.ClassWithMainMethod 
2

在爲可執行文件編譯JAR檔案至少有一些版本的GCJ的,明確指定使用-o將​​輸出可執行它的工作:

GCJ - 主= my.MainClass -o myexe --classpath =我的我/ * java的

雖然我沒有解釋這種行爲。

+1

這確實對我有用,謝謝。 – pts 2012-10-09 12:40:31