Trouble linking static libraries using Android NDK r5b

此生再无相见时 提交于 2019-12-12 14:00:29

问题


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!


回答1:


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



回答2:


Seems each library needs to be its own prebuilt module as shown in: Linking thirdparty libs (libs.a) with NDK



来源:https://stackoverflow.com/questions/5173706/trouble-linking-static-libraries-using-android-ndk-r5b

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!