Проблемы со связью статических библиотек с помощью 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
Другие вопросы по тегам