2013-07-01 51 views
0

我有一个依赖本机库的Java项目。我正在使用SWIG构建本地库,它在* nix系统上工作正常。我试图在Windows上使用mingw 64位工具链和SWIG来编译它。它将编译,我可以得到适当打包jnilib(即相同的方式,我做它在其他平台上),但是当我尝试加载该库在Java代码中,我得到:使用mingw编译SWIG 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 

回答

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。 runme

它按预期工作