2012-03-01 235 views
6

我有一些兩個共享庫和標題爲他們。 我想使用前兩個庫中的函數構建第三個共享庫。 我認爲makefile有問題。當我嘗試建立收到此:我的項目建立共享庫鏈接到其他不標準共享libarary

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.

結構:

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

也Android.mk SOURSE:

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)

回答

5

看看這個questio N:Android JNI APK Packing

你需要給另一名libs/armeabi/文件夾,以避免衝突與NDK建立和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

被盜從此非常感謝 – xitx 2012-03-01 17:13:44

2

據我瞭解,正確的方法是使用ndk-build而不是直接調用編譯器。

在Android.mk中,您需要爲每個要編譯的靜態庫指定一個模塊,然後指定共享庫應該使用它。在HELLO-JNI樣品項目的修改Android.mk文件的

例子:

如果你想控制哪些模塊編譯當您運行NDK,打造您可以創建創建Application.mk文件(在同一目錄Android.mk),並列出所有的模塊,如下面的例子:

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

我認爲它可以幫助你

+0

我有這個shared1和shared2沒有源代碼。 – xitx 2012-03-01 15:07:44

+0

,我用NDK構建第三個共享庫。 – xitx 2012-03-01 15:08:22

+0

好吧,那麼你用什麼..? – 2012-03-01 15:10:47