2011-03-02 45 views
3

最近升级到NDK r5b,并且构建失败,并且对位于静态库中的函数执行“未定义引用”。使用Android 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 /目录中。

我会很感激,如果任何人都可以为我阐明这一点。谢谢!

+0

http://stackoverflow.com/questions/7332679/cant-create-shared-library-with-static-inside – 2011-09-08 11:52:44

回答

1

你在使用ndk-build构建库吗?

如果没有,我通常把我与JNI的文件夹中的独立工具链构建的库和LOCAL_LDLIBS直接通过名称来引用它们:

LOCAL_LDLIBS := libvoiceengine.a 
+0

静态库是使用“ndk-build”脚本构建的,然后生成.a被shell脚本复制到/ obj/local/armeabi-v7a /目录中。 – Brian 2011-03-02 21:49:40

+0

嗯,另一个缺陷是从C++访问C函数而不使用extern“C”{...} – 2011-03-02 21:54:59

+0

我们所有的代码都是C代码。奇怪的是,完全相同的项目设置使用NDK 4rb没有问题。 – Brian 2011-03-02 22:22:33