找不到本机的实现

时间:2011-05-23 11:07:05

标签: android native android-ndk

我使用android-ndk编译了我的c源代码然后我将.so文件放在我的android项目的libs文件夹中但是当我调用本机函数时,我有一个“找不到本机的实现”错误。 如果我尝试从adb shell调用此函数一切正常,所以我不明白为什么会出现这个错误。 请帮忙, 安德烈

2 个答案:

答案 0 :(得分:15)

JNI有一个确切的命名方案,这个方案不是很明显。也许你的函数实现不符合它?

例如,如果您希望能够从JAVA代码调用名为startServer的本机函数,假设您的包名为com.example.something且您的类名为MyClass,则您的JAVA中应该有一个成员函数像这样的课:

private native void startServer();

然后你的JNI实现应该是这样的:

JNIEXPORT void Java_com_example_something_MyClass_startServer(JNIEnv *env, jobject obj) {  

// Do something here...

}

否则,存在链接错误。

答案 1 :(得分:13)

你可以得到这个的另一个原因是,如果你在进行JNI函数调用时没有调用你的库:

static {
    System.loadLibrary("myJNIFILE");
}
应该在实际引用JNI函数之前的某处调用