我使用 swig 将 C++ 转换为 Java。 我使用 g++ 创建 DLL 并进行编译。
swig -c++ -java -package preprocessor Point.i
g++ -c -std=c++11 Point.cpp Point_wrap.cxx -I E:\ProgramFiles\jdk\include -I E:\ProgramFiles\jdk\include\win32
g++ -shared Point_wrap.o Point.o -o point.dll
我在编译和创建 dll 时没有任何错误。 因此,当我将生成的 java 文件和 dll 放入我的项目时,我在创建新对象时遇到了 UnsatisfiedLinkError。它仅在我使用 Windows 8.1 x86 时出现。在 x64 版本上一切正常。
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: preprocessor.PointClassJNI.new_Point__SWIG_0()J
at preprocessor.PointClassJNI.new_Point__SWIG_0(Native Method)
at preprocessor.Point.<init>(Point.java:78)
at GUI.FileWorker.fileParser(FileWorker.java:45)
at GUI.MainWindow$2.actionPerformed(MainWindow.java:139)
这是 swig 生成的内容,也是我创建 point = new Point() 时发生错误的地方;
public Point() {
this(PointClassJNI.new_Point__SWIG_0(), true);
}
也许有人遇到过这个问题。如果有任何帮助,我将不胜感激!
最佳答案
最后我在这个 question 中找到了解决方案. 只需要在创建 dll 时将 -Wl,--add-stdcall-alias 添加到我的 .bat 文件即可。
swig -c++ -java -package preprocessor Point.i
g++ -c -std=c++11 Point.cpp Point_wrap.cxx -I E:\ProgramFiles\jdk\include -I E:\ProgramFiles\jdk\include\win32
g++ -shared Point_wrap.o Point.o -Wl,--add-stdcall-alias -o point.dll
rkapl,谢谢你的回复!
关于java - Swig C++ 到 Java UnsatisfiedLinkError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26742319/