我有一个名为 B 的 ac 库,它依赖于其他名为 A 的 c 库。我确信我可以通过 Android NDK 成功编译和使用 A。
现在我正在尝试使用 Android NDK 编译 B 库。我有一个带有 jni 文件夹的 Android 项目。我的 jni 文件夹包含 A 和 B 文件夹,它们有库 c 代码。jni 文件夹还有一个 prebuilt 文件夹,其中包含 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