2013-03-09 5 views
3

Je suis en train de faire une application NDK, mais je reçois cette erreur:java.lang.UnsatisfiedLinkError: La méthode native non trouvée

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

Je ne comprends pas parce que le nom de la fonction C++ est le même que Java packagename et la classe

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) 

Répondre

22

Vous l'exporter en fonction C++, mais l'éditeur de liens JNI ne comprend pas mutiler nom C++, donc il ne sera pas capable de le trouver.

Vous pouvez utiliser extern "C" avoir la fonction exportée sans C++ Nom mangling:

extern "C" JNIEXPORT jint JNICALL Java_com_example_hellondk_jni_HelloNDK_hello(JNIEnv* env, jobject o) 
{ 
    return (jint) 2; 
} 
+0

Merci un lottttttttt ... :)) – berserk

+0

tu ne sais pas comment cela a été utile. Les mots NE PEUVENT PAS exprimer ma gratitude. J'ai baisé avec ça pendant les 2 dernières heures et c'était quelque chose de si stupide. Il y a une place qui vous est réservée au ciel, monsieur. –

+0

@AnonymousPerson Heureux d'être de service. :-) –

Questions connexes