最近升级到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/目录中。
如果有人能帮我解释一下,我将不胜感激。谢谢!

最佳答案

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

LOCAL_LDLIBS := libvoiceengine.a

10-07 19:16