0

我正在尝试通过 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:[项目文件夹]/静态库:在函数中 [函数名]:[文件名]:39:错误:未定义对 '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”生成文件如下:

APP_ABI := armeabi armeabi-v7a x86
APP_PLATFORM := android-9

根据“nm” Unix 命令,此函数在 Android NDK 库“libandroid.so”中定义,该库存在于所有目标平台的 NDK 路径中。如上所示,我在“LOCAL_LDLIBS”宏中包含了“-landroid”,这应该允许我链接到该库。我还需要做什么来修复这个编译错误?

4

1 回答 1

3

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

include $(BUILD_SHARED_LIBRARY)  

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

于 2013-01-26T06:21:07.217 回答