Sto lavorando con Android NDK r6b sotto cygwin (il sistema è aggiornato correttamente). Sto modificando il campione ciao-jni per imparare a lavorare con NDK. Dato che ho una libreria scritta in C++ che desidero usare nell'hello-jni (in realtà, ho creato un prj chiamato helloworld con un singolo file .cpp chiamato ndkfoo.cpp), ho creato un nuovo progetto Android in Eclipse (aggiornato per Android), aggiunto una directory jni, aggiunto un file Android.mk e Application.mk, modificato per compilare il file .cpp. Alla fine della compilazione, ottengo un file .so.NDK Android - problema di collegamento di una libreria esterna (non trovata)
Ora, nel helloworld Android.mk, ho bisogno di apportare alcune modifiche per dire al linker di includere quella libreria. Supponiamo che il file di libreria è libmylib.so, ho il seguente script android.mk:
local_path: = $ (chiamare il mio-dir)
includono $ (CLEAR_VARS)
LOCAL_MODULE: = ndkfoo
LOCAL_SRC_FILES: = ndkfoo.cpp
LOCAL_C_INCLUDES + = $ (local_path)/mylib
LOCAL_LDLIBS + = -L $ (local_path) /../../ mylib/librerie/armeabi/-lmylib
includono $ (BUILD_SHARED_LIBRARY)
mie cartelle sono organizzate nel modo seguente:
d:/android/android-ndk-r6b => android ndk root
d:/android/workspace/helloworld => helloworld project
d:/android/workspace/mylib => mylib project library
(di conseguenza, il percorso per libmylib.so è: d:/android/workspace/mylib/libs/armeabi).
Sfortunatamente, questo non sembra funzionare. Se rimuovo ogni riferimento a mylib da ndkfoo.cpp, esso viene compilato ed eseguito anche sul mio telefono. Se io non rimuovere i riferimenti a mylib, compila ma doens't link: ottengo il seguente risultato:
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: impossibile trovare -lmylib
Ps. Ho dimenticato di menzionare che eseguo ndk-buld sotto la directory jni del progetto helloworld. Pss. Ho trovato molte domande simili su Internet. Ho sempre lavorato con Visual C/C++ IDE, quindi sono davvero una novità per GCC, makefile e così via ...
Ok, ha trovato come risolvere questo problema. Per qualche strana ragione che non capisco, il percorso specificato come -L/cygdrive/d/android/workspace/mylib/libs/armeabi non funziona (ed è per questo che l'utilizzo di LOCAL_PATH provoca un errore). Invece, usando -Ld:/android/workspace/mylib/libs/armeabi o -L ../../ mylib/libs/armeabi funziona. Suppongo che Cygwin sia il problema qui ... – Luke
pubblica il tuo commento come risposta se risolve il tuo problema –