Проблемы со связью статических библиотек с помощью Android NDK r5b
Недавно обновлен до NDK r5b, и сборка завершается с "неопределенной ссылкой" на функции, расположенные в статической библиотеке.
Вот ошибка
/home/brian/workspace/VoiceEngineDemo/obj/local/armeabi-v7a/objs-debug/voiceenginejni/voice_engine_jni.o: In function `initVE':
/home/brian/workspace/VoiceEngineDemo/jni/voice_engine_jni.c:944: undefined reference to `VE_ADT_create'
Кажется, что процесс связывания не загружает статический модуль, даже если он определен в Android.mk следующим образом:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := voiceenginejni
LOCAL_SRC_FILES := voice_engine_jni.c printing.c jaudio.c etime.c
LOCAL_CFLAGS := -D __arm -D ANDROID -D USE_AEC_DEFAULTS -D USE_EC_DEFAULTS -D _DEBUG -D EC_VARIANT=EC_VARIANT_NEC -D AECG1_5_ENABLE
LOCAL_STATIC_LIBRARIES := libvoiceengine libcpufeatures libaecg2
LOCAL_LDLIBS := -llog -ldl
include $(BUILD_SHARED_LIBRARY)
$(call import-module,cpufeatures)
Функция VE_ADT_create находится в libvoiceengine.a, которая была помещена в каталог /obj/local/armeabi-v7a/.
Буду признателен, если кто-нибудь сможет пролить свет на это для меня. Спасибо!
2 ответа
Кажется, что каждая библиотека должна иметь свой собственный предварительно собранный модуль, как показано в: Связывание сторонних библиотек (libs.a) с NDK
Вы собираете библиотеки с помощью ndk-build?
Если нет, я обычно храню библиотеки, которые я создал с помощью автономного набора инструментов, в папке jni и ссылаюсь на них по имени в LOCAL_LDLIBS
:
LOCAL_LDLIBS := libvoiceengine.a