java.lang.UnsatisfiedLinkError: собственный метод не найден

Я пытаюсь создать приложение NDK, но получаю следующую ошибку:

java.lang.UnsatisfiedLinkError: Native method not found: com.example.hellondk.jni.HelloNDK.hello:()I

Я не понимаю, потому что имя функции С++ совпадает с именем пакета и классом 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)

person alvinmeimoun    schedule 09.03.2013    source источник


Ответы (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;
}
person James McLaughlin    schedule 09.03.2013
comment
Большое спасибо... :)) - person berserk; 31.03.2014
comment
Вы не представляете, насколько это было полезно. Словами НЕ МОГУТ выразить мою благодарность. Я возился с этим последние 2 часа, и это было что-то настолько глупое. Для тебя зарезервировано место на небесах, добрый сэр. - person Anonymous Person; 04.11.2015
comment
@AnonymousPerson Рад быть полезным. :-) - person James McLaughlin; 04.11.2015