2015-02-06 2 views
0

Мне была предоставлена ​​общая библиотека, построенная на Linux x86, назовем ее libA.so, и я хочу использовать вызовы функций, предоставляемые этой библиотекой SDK.Android NDK: Связывание общей библиотеки x86

Я имею вопросы строительства и есть несколько вопросов:

1) Я буду иметь возможность строить для x86, но я смогу построить для руки? Я считаю, что ответ отрицательный, то есть я не могу работать на 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. Пожалуйста, дайте мне знать, могу ли я запустить B в рабочей среде, хотя SDK, на который я полагаюсь, был построен на x86.

+0

Вы можете разместить ошибку вы получаете? Кроме того, вы можете уточнить: у вас есть только двоичная версия libA.so, скомпилированная для x86, и нет исходного кода для libA.so, и вы хотите иметь код в своем собственном B.cpp, который вызовет функцию из libA.so ? –

+0

Да, вы правы! – Jary316

ответ

0

Если ваша общая библиотека libA.so была скомпилирована для linux-x86, она, конечно же, не будет запускаться на целевые объекты android x86 (главным образом потому, что она должна быть связана с Bionic C-библиотекой вместо glibc), и абсолютно не на 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

Смежные вопросы