У меня есть старое приложение (C++), которое я хочу вызывать с помощью java через JNI. Итак, я прочитал несколько руководств и основы (вызов метода на C++ с Java) работал очень хорошо.JNI - создать экземпляр другого класса C++
Но теперь моя проблема в том, что я хочу экземпляр другого объекта C++ в методе, который используется JNI. Это принципиально невозможно или есть ли способ сделать это?
Для объяснения:
Это мой Java-класс helloworld.java который вызывает нативный метод 'callnative()'
public class helloworld{
private native void callnative();
public static void main(String[] args){
new helloworld().callnative();
}
static {
System.loadLibrary("helloworld");
}
}
Это нативный метод java_helloworld_callnative (..)
#include <jni.h>
#include <stdio.h>
#include "helloworld.h"
#include "hellouniverse.h"
JNIEXPORT void JNICALL Java_helloworld_callnative(JNIEnv *env,
jobject obj)
{
printf("HelloWorld\n");
hellouniverse *h = new hellouniverse();
h->printHelloUniverse();
return;
}
Это класс hellouniverse
#include "hellouniverse.h"
#include <stdio.h>
#include <string>
using namespace std;
hellouniverse::hellouniverse(){
}
void hellouniverse::printHelloUniverse(){
printf("HelloUniverse!!\n");
}
Я составил helloworld.cpp с:
г ++ -fPIC -shared -I $ JAVA_PATH/включают -I $ JAVA_PATH/включать/Linux/-o libhelloworld.so hellworld.cpp
и hellouniverse.cpp с:
г ++ -c -o hellouniverse.o hellouniverse.cpp
при запуске Java HelloWorld выход:
HelloWorld Java: символ ошибки поиска:. $/libhelloworld.so: не определено символ: _ZN13hellouniverseC1Ev
Я надеюсь, что вы можете помочь мне с моей проблемой :-)