找不到JNI本机方法

时间:2013-12-19 11:35:10

标签: java android android-ndk

我在该软件包中有一个名为com.example.remote的软件包我有一个带有

的Remote.java文件
public native static void send_feedback(String feedback);

static {
    System.loadLibrary("com_example_remote_Remote");
}

然后在我的com_example_remote_Remote.c文件中,我得到了这个方法:

JNIEXPORT void JNICALL Java_com_example_remote_Remote_send_feedback(JNIEnv *env, jclass clazz, jstring feedback)

一切都在编译。但是当我调用java函数时程序停止工作并给我:

12-19 12:21:31.183: E/AndroidRuntime(3196): FATAL EXCEPTION: main
12-19 12:21:31.183: E/AndroidRuntime(3196): java.lang.UnsatisfiedLinkError: Native method not found: com.example.remote.Remote.send_feedback:(Ljava/lang/String;)V
12-19 12:21:31.183: E/AndroidRuntime(3196):     at com.example.remote.Remote.send_feedback(Native Method)

我认为我的语法符合JNI的规则。我想删掉obj地图可能会解决问题。我重建了这个项目,但仍然给了我这个错误。

编辑:

将名称更改为sendFeedback,现在我收到此错误:

12-19 12:49:26.335: A/libc(3280): Fatal signal 11 (SIGSEGV) at 0x00000cd0 (code=0), thread 3280 (.example.remote)

2 个答案:

答案 0 :(得分:1)

在本机方法定义中添加extern "C"。即。

extern "C" JNIEXPORT void JNICALL Java_com_example_remote_Remote_send_feedback(JNIEnv *env, jclass clazz, jstring feedback){.......}

或者

如果可能,在声明和定义中更改MethodName(在java文件和.c文件中),因为_可能在方法名称中有问题。即。

public native static void sendFeedback(String feedback);


extern "C" JNIEXPORT void JNICALL Java_com_example_remote_Remote_sendFeedback(JNIEnv *env, jclass clazz, jstring feedback)
{
....
}

您可以找到示例here

答案 1 :(得分:0)

我已将名称更改为sendFeedback,因此没有下划线。此方法中也存在错误,对于此答案无关紧要。