【问题标题】:java.lang.UnsatisfiedLinkError: Native method not foundjava.lang.UnsatisfiedLinkError:找不到本机方法
【发布时间】:2013-03-09 15:24:15
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    您将其导出为 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;
    }
    

    【讨论】:

    • 非常感谢... :))
    • 您没有意识到这有多大帮助。言语无法表达我的感激之情。在过去的 2 个小时里,我一直在纠结这个问题,这太愚蠢了。天上为你预留了一个位置,好先生。
    • @AnonymousPerson 很高兴为您服务。 :-)
    猜你喜欢
    • 2014-08-25
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多