0

我有一个依赖于本机库的 Java 项目。我正在使用 SWIG 构建本机库,该库在 *nix 系统上运行良好。我正在尝试使用 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文件

我使用来自http://nuwen.net/的SWIG 2.0.10、Oracle JDK 1.7.0_40 和 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 回答