2015-02-06 180 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