简体   繁体   中英

Trouble linking static libraries using Android NDK r5b

Recently upgraded to NDK r5b, and the build fails with "undefined reference" to functions located in a static library.

Here is the error

/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'

It seem the link process is not loading the static module even though it is defined in the Android.mk as follows:

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)    

The VE_ADT_create function is located in libvoiceengine.a, which has been placed in the /obj/local/armeabi-v7a/ directory.

I'd appreciate it if anyone can shed some light on this for me. Thanks!

Are you building the libraries using ndk-build?

If not, I usually keep libraries I've built with the standalone toolchain in the jni folder and reference them directly by name in LOCAL_LDLIBS :

LOCAL_LDLIBS := libvoiceengine.a

似乎每个库都需要是它自己的预构建模块,如下所示: 将第三方库(libs.a)与NDK链接

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM