我正在尝试制作NDK应用程序,但是我收到了这个错误:
java.lang.UnsatisfiedLinkError: Native method not found: com.example.hellondk.jni.HelloNDK.hello:()I
我不明白,因为C ++函数的名称与Java包名和类
相同HelloNDK.cpp
#include <jni.h>
JNIEXPORT jint JNICALL Java_com_example_hellondk_jni_HelloNDK_hello(JNIEnv* env, jobject o){
return (jint) 2;
}
HelloNDK.java
package com.example.hellondk.jni;
public class HelloNDK {
public native int hello();
static {
System.loadLibrary("HelloNDK");
}
}
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := HelloNDK
LOCAL_SRC_FILES := HelloNDK.cpp
include $(BUILD_SHARED_LIBRARY)
答案 0 :(得分:22)
您将其导出为C ++函数,但JNI链接器并不了解C ++名称修改,因此无法找到它。
您可以使用extern "C"
导出函数而不使用C ++名称修改:
extern "C" JNIEXPORT jint JNICALL Java_com_example_hellondk_jni_HelloNDK_hello(JNIEnv* env, jobject o)
{
return (jint) 2;
}