ErGo_404 Posté(e) 6 juillet 2010 Share Posté(e) 6 juillet 2010 Bonjour ! je suis en train de bosser sur un projet qui utilise le NDK. Après avoir passé du temps pour réussir à charger la librairie (il se trouve qu'Android n'aime pas qu'une librairie s'appelle libjpeg-android.so, il faut l'appeler libjpeg.so :-S ), je n'arrive pas à charger les méthodes qui sont dedans. Voici la déclaration de la méthode en Java : private native int capaciteJPEG(); Cette méthode se trouve dans le package et la classe suivants : com.dga.SteganoImageJPG La commande javah -jni m'a donné ce header : /* DO NOT EDIT THIS FILE - it is machine generated */ #include /* Header for class com_dga_SteganoImageJPG */ #ifndef _Included_com_dga_SteganoImageJPG #define _Included_com_dga_SteganoImageJPG extern "C" { /* * Class: com_dga_SteganoImageJPG * Method: capaciteJPEG * Signature: (Ljava/lang/String;)I */ JNIEXPORT jint JNICALL Java_com_dga_SteganoImageJPG_capaciteJPEG (JNIEnv *, jobject); #endif Et mon fichier source .c associé est : #include "com_dga_SteganoImageJPG.h" JNIEXPORT jint JNICALL Java_com_dga_SteganoImageJPG_capaciteJPEG (JNIEnv * env, jobject obj) { return 42; } Je compile avec ndk-build, sans soucis, j'obtiens donc un .so qui se place tout seul dans le bon répertoire. Lorsque je lance mon programme, j'obtiens dans le log : 07-06 11:49:47.226: DEBUG/dalvikvm(19473): No JNI_OnLoad found in /system/lib/libjpeg.so 0x44a00320, skipping init Cette ligne n'est qu'un warning, et pour moi ça veut dire que la librairie s'est correctement chargée (peut être que je me trompe ?) Lorsqu'ensuite j'appelle la méthode native en Java, j'obtiens ceci : 07-06 11:49:47.236: WARN/dalvikvm(19473): No implementation found for native Lcom/dga/SteganoImageJPG;.capaciteJPEG ()I 07-06 11:49:47.246: ERROR/AndroidRuntime(19473): java.lang.UnsatisfiedLinkError: capaciteJPEG Mon anglais me permet de comprendre qu'il ne trouve pas l'implémentation de la méthode, mais je ne vois pas pourquoi. D'autant que j'ai essayé de compiler les exemples du NDK, ça fonctionne niquel, et j'ai refait un autre projet simple utilisant le NDK qui fonctionne aussi niquel. Je suis sous Windows, je lance ndk-build avec cygwin et je teste mon programme sur Froyo sur un Nexus One (mais j'ai la même erreur sur un système en 2.0 sur l'émulateur). Sauriez-vous d'où peut venir l'erreur ? Merci et bonne journée ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
ErGo_404 Posté(e) 7 juillet 2010 Auteur Share Posté(e) 7 juillet 2010 Okay, j'ai trouvé. En fait ma librairie s'appelle libjpeg (car elle contient une libjpeg modifiée), et Android essayait donc de charger la "vraie" libjpeg d'Android au lieu de la mienne, du coup il ne trouvait pas ma méthode. Il a suffit que je la renomme en myjpeg et hop ça a tourné niquel :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.