java - Swig C++ 到 Java UnsatisfiedLinkError

标签 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);
  }

也许有人遇到过这个问题。如果有任何帮助,我将不胜感激!

最佳答案

最后我在这个 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/

相关文章:

c++ - 错误: use of deleted function 'ClassName::ClassName(const ClassName&)'

java - 将字符串从 xml 响应转换为 pdf

c++ - 如何设置QTreeView的起点目录?

java - 获取数据后关闭串口,java使用RXTX

c++ - 处理大量的浮点矩阵

c++ - MFC:RadioButton 在 CWnd 的子类中不起作用(变灰)

C++静态变量多实例

c++ - 使用 g++ 制作静态库的优化和标志

java - Mockito 模拟对象在方法内部的方法调用中被分配了一个 null 值

java - 如何在 Windows 上通过 Java 启动 MySQL 并在启动时返回?