You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android NDK编译报错:变量已定义未使用,如何禁用对应编译标志?

问题描述

我尝试编译Android-ImageMagick7仓库生成共享库,使用ndk-build命令启动编译,命令如下:

C:\sdks\Android\Sdk\ndk\25.1.8937393\build\ndk-build --output-sync=none NDK_PROJECT_PATH=./ NDK_APPLICATION_MK=Application.mk APP_BUILD_SCRIPT=Android.mk NDK_OUT=./build/ NDK_LIBS_OUT=./jniLibs -j 4

编译时出现以下错误:

...
[arm64-v8a] Compile        : xml2 <= encoding.c
[arm64-v8a] Compile        : xml2 <= error.c
[arm64-v8a] Compile        : xml2 <= parserInternals.c
././libxml2-2.9.9/encoding.c:2397:12: error: variable 'writtentot' set but not used [-Werror,-Wunused-but-set-variable]
    size_t writtentot = 0;
           ^
././libxml2-2.9.9/encoding.c:2570:9: error: variable 'writtentot' set but not used [-Werror,-Wunused-but-set-variable]
    int writtentot = 0;
        ^
././libxml2-2.9.9/encoding.c:2572:9: error: variable 'output' set but not used [-Werror,-Wunused-but-set-variable]
    int output = 0;
        ^
3 errors generated.
make: *** [C:/sdks/Android/Sdk/ndk/25.1.8937393/build/../build/core/build-binary.mk:422: build//local/arm64-v8a/objs/xml2/./libxml2-2.9.9/encoding.o] Error 1
make: *** Waiting for unfinished jobs....

我知道这是警告被当作错误处理导致的,尝试在Application.mk中添加以下内容禁用该行为,但没有效果:

APP_CFLAGS   += -O3
APP_CFLAGS   += -Wno-unused-but-set-variable

APP_CPPFLAGS += -O3
APP_CPPFLAGS += -Wno-unused-but-set-variable

请问如何禁用ndk-build传递给编译器的导致该错误的标志?

解决方法

问题根源是libxml2模块的编译配置中单独开启了-Werror,全局APP_CFLAGS的优先级低于模块自身的编译标志,所以你之前的配置没生效。可以按以下方式处理:

  • 修改libxml2模块的编译配置
    找到仓库中libxml2对应的Android.mk文件(一般在libxml2-2.9.9目录下或引用该模块的配置文件中),找到该模块的LOCAL_CFLAGS配置:
    1. 直接移除其中的-Werror标志;
    2. 或者追加-Wno-unused-but-set-variable来覆盖警告转错误的规则:
LOCAL_CFLAGS += -Wno-unused-but-set-variable
  • 全局禁用警告转错误(快速但不推荐)
    如果找不到模块单独配置,可在Application.mk中添加全局规则直接禁用所有警告转错误:
APP_CFLAGS += -Wno-error

注意:这个方法会掩盖其他潜在编译问题,仅作为临时方案使用。

  • 排查标志来源
    执行编译命令时添加V=1参数,查看完整编译命令行,确认-Werror的具体来源:
C:\sdks\Android\Sdk\ndk\25.1.8937393\build\ndk-build V=1 --output-sync=none NDK_PROJECT_PATH=./ NDK_APPLICATION_MK=Application.mk APP_BUILD_SCRIPT=Android.mk NDK_OUT=./build/ NDK_LIBS_OUT=./jniLibs -j 4

查看编译encoding.c的完整命令,针对性处理对应的配置项。

内容的提问来源于stack exchange,提问作者Haidar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 09:01:29