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...

Ok, trouvé comment résoudre ce problème. Pour quelque étrange raison que je ne comprends pas, le chemin d'accès spécifié comme -L/cygdrive/d/android/espace de travail/mylib/libs/armeabi ne fonctionne pas (et c'est pourquoi l'utilisation de LOCAL_PATH résultats dans une erreur). Au lieu de cela, l'aide -Ld:/android/espace de travail/mylib/libs/armeabi ou-L../../mylib/libs/armeabi fonctionne. Je suppose que cygwin est le problème ici...
poster un commentaire en tant que réponse si cela résout votre problème

OriginalL'auteur Luke | 2011-09-09