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配置:- 直接移除其中的
-Werror标志; - 或者追加
-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
相关产品推荐
相关产品推荐

