Android NDK:链接 x86 共享库

Android NDK: Linking x86 shared library

我得到了一个构建在 Linux x86 上的共享库,我们称之为 libA.so,我想使用这个库 SDK 提供的函数调用。

我在构建时遇到问题并有几个问题:

1) 我可以为 x86 构建,但我可以为 arm 构建吗?我相信答案是否定的,这意味着我不能 运行 例如在 Nexus 5 上。 2) ndk-build 抱怨 #include 应该由我的 LOCAL_SHARED_LIBRARIES 解决。我不确定为什么会这样。我的Android.mk如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := B
LOCAL_SRC_FILES := B.cpp

LOCAL_SHARED_LIBRARIES := A
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)

有人可以帮我解决我的Android.mk吗?我不明白为什么它会抱怨我在 B.cpp 中的 include 语句。请让我知道我是否可以 运行 B 在 arm 环境中,尽管我依赖的 SDK 是基于 x86 构建的。

如果你的共享库 libA.so 是为 linux-x86 编译的,它肯定不会 运行 在 android x86 目标上(主要是因为它需要链接到 Bionic C 库而不是 glibc),并且绝对不在 android arm 设备上。

然后,为了解决你的第二个问题,如果你可以为你的 android 目标正确编译 android 共享库,你可以这样包含你的库:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := A
LOCAL_SRC_FILES := ../libA/prebuilts/$(TARGET_ARCH_ABI)/libA.so # path to libA .so file, depending on the target ABI.
LOCAL_EXPORT_C_INCLUDES := ../libA/includes # path to libA headers.
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := B
LOCAL_SRC_FILES := B.cpp
LOCAL_SHARED_LIBRARIES := A
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)