Android NDK:链接x86共享库

时间:2015-02-06 02:41:34

标签: android makefile android-ndk

我获得了一个基于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中的包含声明。如果我可以在arm环境中运行B,请告诉我,虽然我依赖的SDK是在x86上构建的。

1 个答案:

答案 0 :(得分:0)

如果您的共享库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)