2015-02-06 122 views
0

我得到了一个构建在Linux x86上的共享库,我们称之为libA.so,并且我想使用此库SDK提供的函数调用。Android NDK:链接x86共享库

我有问题的建筑,并有几个问题:

1)我将能够建立适用于x86,但我将能够建立手臂?我相信答案是否定的,这意味着我无法在Nexus 5上运行。 2)ndk-build抱怨应该由我的LOCAL_SHARED_LIBRARIES解决的#include。我不确定这是为什么。我的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上的。

+0

你可以发布你所得到的错误?另外,你能否澄清一下:你只有一个针对x86编译的libA.so的二进制版本,没有针对libA.so的源代码,并且你想在自己的B.cpp中有代码,它将从libA.so调用一个函数? – 2015-02-06 14:01:22

+0

是的你是对的! – Jary316 2015-02-06 19:11:41

回答

0

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

然后,解决您的第二个问题,如果你能得到正确的编译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) 
+0

非常感谢,这个作品! – Jary316 2015-02-06 19:12:25