0

ネイティブ ライブラリに依存する Java プロジェクトがあります。*nix システムで正常に動作するネイティブ ライブラリを構築するために SWIG を使用しています。mingw 64ビットツールチェーンとSWIGを使用して、Windowsでコンパイルできるようにしようとしています。それはコンパイルされ、適切にパッケージ化された jnilib を取得できます (つまり、他のプラットフォームで行っているのと同じ方法) が、Java コードでライブラリをロードしようとすると、次のようになります。

Exception in thread "main" java.lang.UnsatisfiedLinkError: ... .jnilib: Can't find dependent libraries

そして、Java側にトレースがあります。明らかに何かを適切にリンクしていませんが、何がわかりません。私のコンパイルコマンドの関連部分は次のとおりです。

swig -java -package cStopPow -c++ StopPow.i

x86_64-w64-mingw32-g++ -I"C:/Progra~1/Java/jdk1.7.0_25/include/" -I"C:/Progra~1/Java/jdk1.7.0_25/include/win32/" -std=c+
+11 -O3 -I"C:/MinGW/include/boost/math/" -c ../src/StopPow.cpp ../src/StopPow_SRIM.cpp ../src/StopPow_LP.cpp ../src/Stop
Pow_BetheBloch.cpp ../src/StopPow_AZ.cpp ../src/PlotGen.cpp ../src/AtomicData.cpp StopPow_wrap.cxx

x86_64-w64-mingw32-g++ -shared -lmingw32 -mconsole StopPow_wrap.o StopPow.o StopPow_SRIM.o StopPow_LP.o StopPow_BetheBlo
ch.o StopPow_AZ.o PlotGen.o AtomicData.o -o libcStopPow.jnilib
4

1 に答える 1

0

出力が libcStopPow.jnilib になるのはなぜですか? 私はそれがdllファイルでなければならないと思う

SWIG 2.0.10、Oracle JDK 1.7.0_40、およびhttp://nuwen.net/の mingw 64 を Examples\java\simple と共に使用します。私はcmdで次のことを行います(JAVA_HOMEを正しく設定しました) swig -java -c++ example.i g++ -Wall -Wl,--kill-at -I "%JAVA_HOME%/include" -I "%JAVA_HOME%/include/win32 " -shared -s -o example.dll *.c *.cxx java -cp . ランメ

期待どおりに動作します

于 2013-09-27T05:48:15.570 に答える