为Android NDK编译:无法找到Android NDK功能定义

时间:2013-01-26 03:42:50

标签: android android-ndk makefile

我正在尝试通过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”宏中,这应该允许我链接到该库。我还需要做些什么来解决这个编译错误?

1 个答案:

答案 0 :(得分:3)

您显示构建静态库的Android.mk,在此步骤中不会调用链接器,而忽略$(LOCAL_LDLIBS)。你可能有另一个Android.mk或不同的部分,你有

include $(BUILD_SHARED_LIBRARY)  

请检查,该部分可能缺少-landroid