Android NDK - problème de la liaison d'une bibliothèque externe (pas trouvé)
Je suis en train de travailler avec Android NDK r6b sous cygwin (le système est correctement mis à jour). Je suis la modification de la bonjour-jni de l'échantillon afin d'apprendre à travailler avec le NDK. Depuis, j'ai une bibliothèque écrite en C++ que je souhaite utiliser dans la bonjour-jni (en fait, j'ai créé un prj appelé helloworld avec un seul .rpc fichier appelé ndkfoo.cpp) de l'échantillon, j'ai créé un nouveau projet Android dans Eclipse (mis à jour pour Android), ajout d'un jni répertoire, ajouté un Android.mk et de l'Application.mk fichiers édités afin de compiler le .rpc. À la fin de la compilation, j'obtiens un .donc fichier.
Maintenant, dans le helloworld Android.mk, j'ai besoin de faire quelques modifications dans l'ordre de dire à l'éditeur de liens pour inclure la bibliothèque. Supposons que le fichier de la bibliothèque est libmylib.donc, j'ai le texte suivant android.mk script:
LOCAL_PATH := $(appel mon-dir)
$(CLEAR_VARS)
LOCAL_MODULE := ndkfoo
LOCAL_SRC_FILES := ndkfoo.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)/mylib
LOCAL_LDLIBS += -L$(LOCAL_PATH)/../../mylib/libs/armeabi/-lmylib
$(BUILD_SHARED_LIBRARY)
Mes répertoires sont organisés de la manière suivante:
d:/android/android-ndk-r6b => android ndk root
d:/android/workspace/helloworld => helloworld project
d:/android/workspace/mylib => mylib project library
(donc, le chemin d'accès à libmylib.donc, est: d:/android/workspace/mylib/libs/armeabi).
Malheureusement, cela ne semble pas fonctionner. Si je supprime toute référence à mylib de ndkfoo.cpp il compile et s'exécute même sur mon téléphone. Si je n'ai pas de supprimer les références à mylib, il compile mais se complique pas le lien: j'obtiens le résultat suivant:
D:/android/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windo
ws/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/
bin/ld.exe: ne peut trouver -lmylib
Ps.
J'ai oublié de mentionner que j'ai exécuter ndk-buld en vertu de la jni répertoire de votre projet helloworld.
Pss.
J'ai trouvé beaucoup de questions similaires sur internet. J'ai toujours travaillé avec Visual C/C++ IDE, donc je suis vraiment nouveau dans GCC, makefiles et ainsi de suite...
poster un commentaire en tant que réponse si cela résout votre problème
OriginalL'auteur Luke | 2011-09-09
Vous devez vous connecter pour publier un commentaire.
Le message
est vous indiquant que l'éditeur de liens n'est pas de trouver votre bibliothèque, cela doit provenir d'un problème dans le LD_LIBS' chemin.
Je pense que mon-dir de macro ne fonctionne pas sur les appareils de l'unité de l'identificateur de la sorte, votre LOCAL_PATH variable devrait manquer le D: et, je pense, ne fonctionnera pas avec cygwin. Je suis un utilisateur de Linux et je ne suis pas sûr à 100% mais, si vous remplacez
par
il devrait fonctionner. D'autre part, vous pouvez toujours définir le chemin relatif par paramètre:
OriginalL'auteur jcm