Swig C ++到Java UnsatisfiedLinkError

时间:2014-11-04 18:25:47

标签: java c++ g++ swig unsatisfiedlinkerror

我使用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);
  }

也许有人有这个问题。我将非常感谢任何帮助!

1 个答案:

答案 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,谢谢你的回复!