我在该软件包中有一个名为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)
答案 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,因此没有下划线。此方法中也存在错误,对于此答案无关紧要。