我使用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);
}
也许有人有这个问题。我将非常感谢任何帮助!
答案 0 :(得分:2)
最后,我在question中找到了解决方案。 我需要在创建dll时为我的.bat文件添加-Wl, - add-stdcall-alias。
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,谢谢你的回复!