找不到本机的实现

And*_*rli 5 android native android-ndk

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

gby*_*gby 15

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

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

private native void startServer();
Run Code Online (Sandbox Code Playgroud)

然后你的JNI实现应该如下所示:

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

// Do something here...

}
Run Code Online (Sandbox Code Playgroud)

否则,存在链接错误.


j2e*_*nue 14

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

static {
    System.loadLibrary("myJNIFILE");
}
Run Code Online (Sandbox Code Playgroud)

应该在实际引用JNI函数之前的某处调用.