在我的C ++方面,我有:
extern "C" {
JNIEXPORT void JNICALL test(JNIEnv*, jobject){}
}
我的活动有一个声明的方法:
public native void test();
然而,当我调用测试时,我得到错误本机方法未找到。有什么问题?
答案 0 :(得分:1)
JNI不寻找函数test
。它寻找的名称是Java_packagename_classname_functionname
形式。例如,如果您的班级是
package your.package;
public class Activity {
static {
System.loadLibrary("your_library");
}
public native void test();
}
然后你的图书馆必须包含一个功能
extern "C" JNIEXPORT void JNICALL Java_your_package_Activity_test(JNIEnv *, jobject) { }
...假设test
没有超载。如果test
超载,请使用javah
程序为您生成标题,因为您不想手动执行此操作。
javah your.package.Activity
将生成一个文件your_package_Activity.h
,其中包含您需要的功能签名。请注意,这需要编译Activity
类,即类路径中必须有文件your/package/Activity.class
。