2012-03-01 191 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