Estoy trabajando con Android NDK r6b en cygwin (el sistema se ha actualizado correctamente). Estoy modificando la muestra de hello-jni para aprender a trabajar con NDK. Como tengo una biblioteca escrita en C++ que deseo usar en el hello-jni (de hecho, he creado un prj llamado helloworld con un solo archivo .cpp llamado ndkfoo.cpp) ejemplo, creé un nuevo proyecto de Android en Eclipse (actualizado para Android), agregó un directorio jni, agregó un Android.mk y archivos Application.mk, los editó para compilar el .cpp. Al final de la compilación, obtengo un archivo .so.Android NDK - problema que une una biblioteca externa (no puede encontrarlo)
Ahora, en el helloWorld Android.mk, necesito hacer algunos cambios para decirle al enlazador que incluya esa biblioteca. Supongamos que el archivo de la biblioteca es libmylib.so, tengo el siguiente script android.mk:
LOCAL_PATH: = $ (llamar a mi-dir)
incluyen $ (CLEAR_VARS)
LOCAL_MODULE: = ndkfoo
LOCAL_SRC_FILES: = ndkfoo.cpp
LOCAL_C_INCLUDES + = $ (LOCAL_PATH)/mibiblioteca
LOCAL_LDLIBS + = -L $ (LOCAL_PATH) /../../ mibiblioteca/libs/armeabi/-lmylib
incluyen $ (BUILD_SHARED_LIBRARY)
Mis directorios se organizan de la siguiente manera:
d:/android/android-ndk-r6b => android ndk root
d:/android/workspace/helloworld => helloworld project
d:/android/workspace/mylib => mylib project library
(por lo tanto, la ruta a libmylib.so es: d:/android/workspace/mylib/libs/armeabi).
Desafortunadamente, esto no parece funcionar. Si elimino toda referencia a mylib de ndkfoo.cpp, compila y ejecuta incluso en mi teléfono. Si no quito referencias a mibiblioteca, compila pero doens't enlace: i obtener el siguiente resultado:
D: /android/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4. 3/preconstruido/windo ws/bin /../ lib/gcc/arm-linux-androideabi/4.4.3 /../../../../ arm-linux-androideabi/ bin/ld. exe: no se puede encontrar -lmylib
Ps. Olvidé mencionar que ejecuto ndk-buld bajo el directorio jni del proyecto helloworld. Pss. He encontrado muchas preguntas similares en internet. Siempre he trabajado con Visual C C IDE/++, así que estoy realmente nuevo a GCC, archivos make y así sucesivamente ...
Bien, descubrió cómo solucionar este problema. Por alguna extraña razón que no entiendo, la ruta especificada como -L/cygdrive/d/android/workspace/mylib/libs/armeabi no funciona (y esta es la razón por la cual el uso de LOCAL_PATH resulta en un error). En cambio, usar -Ld:/android/workspace/mylib/libs/armeabi o -L ../../ mylib/libs/armeabi funciona. Supongo que cygwin es el problema aquí ... – Luke
publique su comentario como respuesta si resuelve su problema –