Использование SWIG для переноса c++ в java UnsatisfiedLinkError: HeaderJNI.new_Test()J

Я пытался использовать SWIG в своем проекте. Кажется, я что-то упускаю. Пожалуйста помоги. Что я сделал до сих пор на основе этого руководства: http://web.mit.edu/svn/src/swig-1.3.25/Examples/java/class/index.html:

1.создал заголовок Header.h с помощью Visual Studio

class Test {
public:
    Test();
    ~Test();
    void showNumber();
private:
   int number;
};

2.создан интерфейс swig

/* File : Header.i */
%module Header

%{
#include "Header.h"
%}

/* Let's just grab the original header file here */
%include "Header.h"

3. В CMD запустите:

swig -c++ -java Header.i

4. Создан SwigTest3.cpp

#include "Header.h"
#include <iostream>
Test::Test() {
    number = 12;
}
Test::~Test() {
}
void Test::showNumber() {
    std::cout << "Number: " << number << std::endl;
}

5. Создал 64 dll из файлов cpp и h с помощью Visual Studio.

6. Создан класс Java main.java

public class main{
static{
    try {
    System.load("E:\\C++ projects\\SwigTest3\\SwigTest3\\SwigTest3.dll");
    } catch (UnsatisfiedLinkError e) {
    System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
    System.exit(1);
    }

}
public static void main(String argv[]){
        System.out.println("Hello");
        Test te = new Test();
    }
}

7. Запуск main.java дает мне

Hello
Exception in thread "main" java.lang.UnsatisfiedLinkError: HeaderJNI.new_Test()J
at HeaderJNI.new_Test(Native Method)
at Test.<init>(Test.java:38)
at main.main(main.java:13)

Все файлы находятся в одной папке. Пожалуйста, скажите мне, что я делаю неправильно.


person P.Mac    schedule 08.01.2017    source источник


Ответы (1)


На шаге 3 swig создает файл *_wrap.cxx.

На шаге 5 вы компилируете только файлы .cpp, а не сгенерированный файл .cxx.

person Ludwig Schulze    schedule 21.01.2017