Проблемы со связыванием статических библиотек с помощью Android NDK r5b - PullRequest
3 голосов
/ 03 марта 2011

Недавно обновлен до 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 ]

1 голос
/ 04 марта 2011

Кажется, что каждая библиотека должна иметь свой собственный предварительно собранный модуль, как показано в: Связывание сторонних библиотек (libs.a) с NDK

1 голос
/ 03 марта 2011

Собираете ли вы библиотеки с помощью ndk-build?

Если нет, я обычно сохраняю библиотеки, созданные с помощью автономного набора инструментов, в папке jni и ссылаюсь на них по имени в LOCAL_LDLIBS:

LOCAL_LDLIBS := libvoiceengine.a
...