0

我有一个名为 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

4

1 回答 1

0

Your B library files can actually access the A library, but they just don't know how. Add the required headers (.h files from the A library) to a subfolder of JNI and specify the following :

LOCAL_C_INCLUDES := $(LOCAL_PATH)/your/sub/folder

in your B project declaration.

I still had a problem, and had to declare the A library as PREBUILT_STATIC and then add to the B library

LOCAL_WHOLE_STATIC_LIBRARIES := libA
于 2012-12-17T15:03:56.377 回答