无法使用Android NDK r5b链接静态库

时间:2011-03-02 21:27:15

标签: android linker static-libraries android-ndk

最近升级到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 个答案:

答案 0 :(得分:1)

您是否正在使用ndk-build构建库?

如果没有,我通常会将我使用独立工具链构建的库保存在jni文件夹中,并直接通过LOCAL_LDLIBS中的名称引用它们:

LOCAL_LDLIBS := libvoiceengine.a

答案 1 :(得分:1)

似乎每个库都需要是自己的预建模块,如下所示:Linking thirdparty libs (libs.a) with NDK