我正在尝试通过Cygwin终端运行“ndk-build”来编译调用Android NDK函数(例如“AAsset_close”)的Android-9项目,但是“ndk-build”命令会返回错误消息,声明它无法找到函数定义。
来自“ndk-build”的错误消息如下:
[Android NDK路径] /toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin /../ lib / gcc / arm-linux-androideabi / 4.6 /../../../。 ./arm-linux-androideabi/bin/ld.exe:[project folder] / static library:in function [function name]:[file name]:39:error:undefined reference to'AAsset_close'
等
我的“Android.mk”文件如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := <name of project>
LOCAL_C_INCLUDES := <folders where header files are located>
LOCAL_CFLAGS := $(LOCAL_C_INCLUDES:%=-I%) -O2 -Wall -D__ANDROID__ -DtyANDROID
LOCAL_CPPFLAGS := $(LOCAL_C_INCLUDES:%=-I%) -O2 -Wall -D__ANDROID__ -DtyANDROID
LOCAL_LDLIBS := -lm -lEGL -lGLESv2 -llog -lz -landroid
LOCAL_STATIC_LIBRARIES := android_native_app_glue
LOCAL_ARM_MODE := arm
LOCAL_SRC_FILES := <source files>
include $(BUILD_STATIC_LIBRARY)
...
我的“Application.mk”makefile如下:
APP_ABI := armeabi armeabi-v7a x86
APP_PLATFORM := android-9
根据“nm”Unix命令,此功能在Android NDK库“libandroid.so”中定义,该库存在于所有目标平台的NDK路径中。如上所示,我已将“-landroid”包含在“LOCAL_LDLIBS”宏中,这应该允许我链接到该库。我还需要做些什么来解决这个编译错误?
答案 0 :(得分:3)
您显示构建静态库的Android.mk
,在此步骤中不会调用链接器,而忽略$(LOCAL_LDLIBS)
。你可能有另一个Android.mk
或不同的部分,你有
include $(BUILD_SHARED_LIBRARY)
请检查,该部分可能缺少-landroid
。