2009-07-23 76 views
6

我想編譯一個小的Java應用程序到Windows可執行文件。GCJ爲什麼不從我的導入包中找到類?

該應用程序非常小,只有一個主類,但它使用Apache POI。

當我編譯它,一切正常,只要我把POI JAR放入類路徑參數。

但是,當涉及到鏈接時,GCJ無法解析POI包中的類的引用。這些消息都是這樣的:

undefined reference tp 'org::apache::poi:hssf:usermodel:HSSFWorkbook::class$' 

我需要做什麼才能鏈接我的應用程序?

+0

您是否嘗試過實際上將Apache POI中的jar文件包含在項目的lib文件夾中,而不是在編譯時在類路徑中外部鏈接到它? – amischiefr 2009-07-23 12:56:29

+0

是的,同樣的問題。 – 2009-07-23 13:01:18

回答

5

您必須將導入的罐子分別編譯爲.so庫。請務必在編譯代碼時編譯庫時提供--classpath中的Jars。

一個例子,在那裏我編譯GNU密碼庫:

gcj --classpath=source/:libs/gnu-crypto.jar -fjni -c libs/gnu-crypto.jar -o libs/gnu-crypto.o 
gcj -shared -fPIC -o libs/libgnu-crypto.o libs/gnu-crypto.o -o libs/libgnu-crypto.so 

最後,通過一個shell腳本引用庫路徑執行你的可執行文件。例如:

#!/bin/sh 
export LD_LIBRARY_PATH=./libs/:$LD_LIBRARY_PATH 
exec ./MyJavaApp $* 
相關問題