2009-07-23 7 views
6

小さなJavaアプリケーションをWindowsの実行可能ファイルにコンパイルしたい。GCJはインポートしたパッケージのクラスを見つけられないのはなぜですか?

アプリケーションは非常に小さく、メインクラスは1つだけですが、Apache POIを使用しています。

私がコンパイルすると、POI Jarをクラスパス引数に置く限り、すべて正常に動作します。

リンク時に、GCJはPOIパッケージ内のクラスの参照を解決できません。メッセージは次のようになります。

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

アプリケーションをリンクするにはどうすればよいですか?

+0

は、あなたが実際にプロジェクトのlibフォルダ内のApache POIからjarファイルを含むの代わりに、外部からコンパイル時にクラスパスにそれにリンクしようとしたことがありますか? – amischiefr

+0

はい、同じ問題です。 –

+0

Sun JDKまたはOpenJDKで試してみましたか?どちらかが動作すると、GCJのバグです。 – BalusC

答えて

5

インポートされたJarsを.soライブラリに別々にコンパイルする必要があります。 --classpathにJarファイルを用意してください。どちらもコードをコンパイルするときにライブラリをコンパイルしています。私は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 

最後に、ライブラリパスを参照するシェルスクリプトを通して、あなたの実行可能ファイルを実行します。たとえば:

#!/bin/sh 
export LD_LIBRARY_PATH=./libs/:$LD_LIBRARY_PATH 
exec ./MyJavaApp $* 
+1

GCJの使用を開始したばかりで、この回答が非常に役に立ちました。これまでの経験から、最初のコマンドでも '-fPIC'が必要であることに注意してください。 –

関連する問題