2012-03-01 14 views
6

Tengo dos bibliotecas compartidas y un encabezado para ellas. Quiero construir una tercera biblioteca compartida usando funciones de las dos libs anteriores. Tengo un problema con makefile, creo. Cuando intento para construir recibir este:Crear biblioteca compartida que se vincula a otra biblioteca compartida no estándar

Android NDK: /cygdrive/d/.../jni/Android.mk: Cannot find module with tag 'shared1' in import path 
Android NDK: Are you sure your NDK_MODULE_PATH variable is properly defined ? 
Android NDK: The following directories were searched: 
Android NDK: 
/cygdrive/d/.../jni/Android.mk:36: *** Android NDK: Aborting. . Stop.

estructura de mi proyecto:

jni/ 
- myfile.c 
- Android.mk 
    jni/dec/ 
    - lot of header files 
    jni/enc/ 
    - lot of header files 
libs/armeabi/ 
- shared1.so 
- shared2.so

sourse también Android.mk:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_C_INCLUDES := \ 
    $(LOCAL_PATH)/dec \ 
    $(LOCAL_PATH)/enc 

LOCAL_SHARED_LIBRARIES := shared1 shared2 

LOCAL_MODULE := mylib 
LOCAL_SRC_FILES := myfile.c 
LOCAL_LDLIBS += -lOpenSLES 
LOCAL_LDLIBS += -llog 
LOCAL_LDLIBS += -landroid 

include $(BUILD_SHARED_LIBRARY) 

$(call import-module, shared1) 
$(call import-module, shared2)

Respuesta

5

Echa un vistazo a este cuestio n: Android JNI APK Packing

que necesita para dar otro nombre para libs/armeabi/ carpeta para evitar conflictos con NDK construir y añadir el siguiente código antes de la instrucción include $(CLEAR_VARS):

include $(CLEAR_VARS) 
LOCAL_MODULE:=shared1 
LOCAL_SRC_FILES:=3rdparty_libs/shared1.so 
include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE:=shared2 
LOCAL_SRC_FILES:=3rdparty_libs/shared2.so 
include $(PREBUILT_SHARED_LIBRARY) 
+0

muchas gracias – xitx

2

Según tengo entendido, el método correcto es use ndk-build y no invoque el compilador directamente.

En Android.mk necesita especificar un módulo para cada biblioteca estática que desea compilar, y luego especificar que su biblioteca compartida debe usarlo.

Ejemplo de un archivo Android.mk modificado del proyecto de ejemplo hello-JNI:

Si desea control sobre qué módulos para compilar cuando se ejecuta NDK-construir puede crear crear un Application.mk presentar (en el mismo directorio que Android.mk) y una lista de todos los módulos como en el siguiente ejemplo:

APP_MODULES := <module_name_1> <module_name_2> ... <module_name_n> 

Creo que le ayuda

+0

que no tienen código fuente de esta shared1 y shared2. – xitx

+0

y uso NDK-build para crear una tercera biblioteca compartida. – xitx

+0

bien entonces, ¿qué usas para eso ...? –

Cuestiones relacionadas