[英]JNI Static Library Failing to Link
I am trying to debug some link errors I am getting when building the C++ side of my app. 我正在尝试调试在构建应用程序的C ++端时遇到的一些链接错误。 The Android.mk looks as follows:
Android.mk如下所示:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := GLES
LOCAL_SRC_FILES := ModelGLES.cpp RendererGLES.cpp
LOCAL_LDLIBS := -llog -lGLESv1_CM
LOCAL_LDFLAGS := -Wl,-Map,$(LOCAL_MODULE).map
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := SndSys
LOCAL_SRC_FILES := SndSys.cpp libaudio_wrapper.cpp
LOCAL_STATIC_LIBRARIES := libaudio_ARM_NDK
LOCAL_LDLIBS := -llog
LOCAL_LDFLAGS := -Wl,-Map,$(LOCAL_MODULE).map
LOCAL_C_INCLUDES := $(LOCAL_PATH)
include $(BUILD_SHARED_LIBRARY)
The error I am getting is with libaudio_wrapper. 我遇到的错误是libaudio_wrapper。 The linker can't resole the symbols in libaudio_ARM_NDK.
链接器无法重命名libaudio_ARM_NDK中的符号。 The folder structure looks as follows:
文件夹结构如下所示:
App\\ jni\\ SndSys.cpp libaudio_wrapper.cpp Android.mk libaudio_ARM_NDK.a App \\ jni \\ SndSys.cpp libaudio_wrapper.cpp Android.mk libaudio_ARM_NDK.a
I am calling ndk-build form inside the jni folder. 我正在jni文件夹中调用ndk-build形式。 The output is as follows:
输出如下:
Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
Compile++ thumb : GLES <= ModelGLES.cpp
Compile++ thumb : GLES <= RendererGLES.cpp
SharedLibrary : libGLES.so
Install : libGLES.so => libs/armeabi/libGLES.so
Compile++ thumb : SndSys <= SndSys.cpp
Compile++ thumb : SndSys <= libaudio_wrapper.cpp
SharedLibrary : libSndSys.so
/Users/bob/Desktop/Root/Relaxation/obj/local/armeabi/objs-debug/SndSys/libaudio_wrapper.o: In function `audioInit(int, int)':
/Users/bob/Desktop/Root/Relaxation/jni/libaudio_wrapper.cpp:37: undefined reference to `GetAudioChannelSize'
/Users/bob/Desktop/Root/Relaxation/jni/libaudio_wrapper.cpp:38: undefined reference to `GetAudioInitControlSize'
Is there an easy way to see if the linker is finding my library? 有没有一种简单的方法来查看链接器是否正在查找我的库? Or to get the command line calls to gcc or ld?
还是要获取对gcc或ld的命令行调用?
The problem was I had upgraded to the ndk-r5. 问题是我已升级到ndk-r5。 Some of the rules for building Prebuilt libraries had changed.
构建预建库的某些规则已更改。 Each pre-built library needs its own Module set aside for it.
每个预构建的库都需要为其保留自己的模块。 The second half of the Android.ml should look like this...
Android.ml的后半部分应如下所示:
include $(CLEAR_VARS)
LOCAL_MODULE := audiolib
LOCAL_SRC_FILES := libaudio_ARM_NDK.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := SndSys
LOCAL_SRC_FILES := SndSys.cpp libaduio_wrapper.cpp
LOCAL_STATIC_LIBRARIES := audiolib
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.