Search code examples
javac++g++swigunsatisfiedlinkerror

Swig C++ to Java UnsatisfiedLinkError


I convert C++ to Java using swig. I use g++ for creating DLL and compiling.

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

I don't have any errors while compilation and creating dll. So when I put generated java files and dll to my project I have an UnsatisfiedLinkError when I create new object. It appears only when I use Windows 8.1 x86. On x64 version everything works fine.

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)

This is what swig generates and where error occurs when I create point = new Point();

  public Point() {
    this(PointClassJNI.new_Point__SWIG_0(), true);
  }

Maybe someone had this problem. I will be very grateful for any help!


Solution

  • Finally I find the solution in this question. Just need to add -Wl,--add-stdcall-alias to my .bat file when I create 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 -Wl,--add-stdcall-alias -o point.dll
    

    rkapl, thank you for respond!