Swig C ++ для Java UnsatisfiedLinkError

Я конвертирую C ++ в Java, используя swig.
Я использую 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);
}

Может быть, у кого-то была эта проблема. Буду очень признателен за любую помощь!

3

Решение

Наконец-то я нахожу решение в этом вопрос.
Просто нужно добавить -Wl, — add-stdcall-alias в мой файл .bat, когда я создаю 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, спасибо за ответ!

2

Другие решения


По вопросам рекламы [email protected]