构建链接到其他非标准共享库的共享库

xit*_*itx 6 c++ android gcc shared-libraries android-ndk

我有两个共享库和标头.我想使用前两个库中的函数构建第三个共享库.我觉得makefile有问题.当我尝试构建接收此:

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)
Run Code Online (Sandbox Code Playgroud)

And*_*aev 5

看看这个问题:Android JNI APK包装

您需要为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)
Run Code Online (Sandbox Code Playgroud)