java.lang.UnsatisfiedLinkError:找不到本机方法

时间:2013-03-09 15:24:15

标签: android android-ndk java-native-interface

我正在尝试制作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)

1 个答案:

答案 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;
}