2012-03-01 12 views
6

Ho alcune librerie e intestazione condivise per loro. Voglio costruire la terza libreria condivisa usando le funzioni delle due librerie precedenti. Ho problemi con makefile, penso. Quando provo a costruire ricevere questo:Costruisci libreria condivisa che collega ad altre libararie condivise non standard

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.

struttura del mio progetto:

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

Sourse anche 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)

risposta

5

Date un'occhiata a questo Questio n: Android JNI APK Packing

è necessario dare un altro nome per la cartella libs/armeabi/ per evitare conflitti con NDK costruire e aggiungere il seguente codice prima dell'istruzione 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

grazie mille – xitx

2

Da quanto ho capito, il metodo corretto è quello di usa ndk-build e non invocando direttamente il compilatore.

In Android.mk è necessario specificare un modulo per ciascuna libreria statica che si desidera compilare, quindi specificare che la libreria condivisa deve utilizzarlo.

Esempio di file Android.mk modificata del progetto di esempio ciao-jni:

Se si vuole il controllo su quali moduli per la compilazione quando si esegue NDK-build è possibile creare creare un Application.mk file (nella stessa directory Android.mk) ed elencare tutti i moduli, come nel seguente esempio:

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

penso che ti aiuta

+0

io non hanno codice sorgente di questo shared1 e condivisa2. – xitx

+0

e io uso NDK-build per costruire la terza lib condivisa. – xitx

+0

ok allora cosa usi per quello ..? –

Problemi correlati