Исходные данные:
example.h:
#ifndef _BRIDJ_EXAMPLE_H
#define _BRIDJ_EXAMPLE_H
namespace nl4j {
class SomeClass {
int m_value;
public:
SomeClass(int value);
int someMethod(const char* message);
void someCppFunction(const char* message);
};
}
#endif // _BRIDJ_EXAMPLE_H
example.i
%module example
%{
#include "example.h"
%}
%include "example.h"
Собираем наш cpp и сгенерированный swig-ом в so, при попытке создания объекта из java:
SomeClass cl = new SomeClass(6);
Ошибка:
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.mycompany.testswig.exampleJNI.new_SomeClass(I)J
at com.mycompany.testswig.exampleJNI.new_SomeClass(Native Method)
at com.mycompany.testswig.SomeClass.<init>(SomeClass.java:38)
at com.mycompany.testswig.runme.main(runme.java:18)
Пробуем другой вариант:
example.i
%module example
%{
#include "example.h"
%}
int someMethod(const char* message);
void someCppFunction(const char* message);
%include "example.h"
команда:
gcc -fPIC -o libexample.so example.cpp example_wrap.cxx -I /usr/lib/jvm/java-8-openjdk-amd64/include/ -I /usr/lib/jvm/java-8-openjdk-amd64/include/linux/ -shared
Не компилируется сгенерированный cxx:
example_wrap.cxx: In function ‘jint Java_exampleJNI_someMethod(JNIEnv*, jclass, jstring)’:
example_wrap.cxx:252:46: error: ‘someMethod’ was not declared in this scope
result = (int)someMethod((char const *)arg1);