@evrikom

SWIG и java. Как заставить работать простой пример?

Исходные данные:
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);
  • Вопрос задан
  • 390 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы