2011-09-15 3 views
0

Je développe une application Android qui utilise JNI.UnsatisfiedLinkError problème

La commande javah -jni com.company.tests.MainRenderer m'a donné cette sortie:

/* 
* Class:  com_company_tests_MainRenderer 
* Method: nativeInit 
* Signature:()V 
*/ 
JNIEXPORT void JNICALL Java_com_company_tests_MainRenderer_nativeInit 
    (JNIEnv *, jclass); 

/* 
* Class:  com_company_tests_MainRenderer 
* Method: nativeRender 
* Signature:()V 
*/ 
JNIEXPORT void JNICALL Java_com_company_tests_MainRenderer_nativeRender 
    (JNIEnv *, jclass); 

La commande nm -Ca libRotateJNI.so m'a donné cette sortie:

00001c25 T Java_com_company_tests_MainRenderer_nativeInit(_JNIEnv*, _jclass*) 
00001c29 T Java_com_company_tests_MainRenderer_nativeRender(_JNIEnv*, _jclass*) 

Ceci est comment sont définies les fonctions suivantes:

void Java_com_company_tests_MainRenderer_nativeInit(JNIEnv* env, jobject thiz) 
{ 
    // ... 
} 

void Java_com_company_tests_MainRenderer_nativeRender(JNIEnv* env, jobject thiz) 
{ 
    // ... 
} 

Et en cours d'exécution avec ce message:

WARN/dalvikvm(639): No implementation found for native Lcom/company/tests/MainRenderer;.nativeInit()V 

Je suis sûr que la bibliothèque est chargée. Savez-vous comment puis-je résoudre ce problème?

Répondre

4

Je suppose que vous avez compilé vos méthodes natives avec un compilateur C++, et ne leur avez pas donné de lien extern "C". L'option -C que vous fournissez à nm démonte les noms C++, mais en réalité, les symboles ont des noms différents de ceux recherchés par la JVM car le code a été compilé avec le lien C++. Entourez votre code C++ dans un bloc extern "C" et cela devrait éclaircir les choses.

0

Je ne sais pas ce que votre MainRenderer est et quelle bibliothèque native vous frappiez mais mes fonctions de fichier c toujours regarder quelque chose comme ceci:

void Java_com_ndkfoo_NDKFooActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) { 

La méthode/classe J'appelle est NDKFooActivity et son invocation une fonction native ...

Questions connexes