Android NDK:根据预建的库构建库时出现问题

时间:2012-12-17 14:27:51

标签: android linker android-ndk

我有一个名为B的c库,它依赖于其他名为A的c库。我相信我可以通过Android NDK成功编译和使用A.

现在我正在尝试使用Android NDK编译B库。我和Android项目有一个jni文件夹。我的jni文件夹包含A和B文件夹,它们有库c代码。 jni文件夹还有一个预构建的文件夹,它包含a.so文件(预构建的A库文件)。

我的问题是我无法构建B.我可以编译它,但我无法链接它。拜托,任何人都可以帮我指出我的错误吗? A和B是我用于我的项目的通用名称,而不是我正在使用的真实名称。我将在Android.mk文件下面列出。

用于构建A的Android.mk文件(此文件对于我描述的Android项目不可见,尽管它也有A代码):

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := libA
LOCAL_SRC_FILES := helloworld.c A/src/fileA.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)/A/src
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/A/src
include $(BUILD_SHARED_LIBRARY)

预建文件夹中的Android.mk文件:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := libA
LOCAL_SRC_FILES := prebuilt/libA.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/A/src
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := libB
LOCAL_SRC_FILES := B/src/fileB.c
LOCAL_SHARED_LIBRARIES := libA
include $(BUILD_SHARED_LIBRARY)

当我执行ndk-build命令时,我的最终输出类似于:

  

B / src / fileB.c:15:错误:未定义引用   'A_function'collect2:ld返回1退出状态make: *   [obj / local / armeabi / libB.so]错误1

1 个答案:

答案 0 :(得分:0)

您的B库文件实际上可以访问A库,但他们只是不知道如何。将所需的标头(来自A库的.h文件)添加到JNI的子文件夹并指定以下内容:

LOCAL_C_INCLUDES := $(LOCAL_PATH)/your/sub/folder
在你的B项目声明中

我仍有问题,必须将A库声明为PREBUILT_STATIC,然后添加到B库

LOCAL_WHOLE_STATIC_LIBRARIES := libA