cocos2d-x-2.1.4:错误:格式不是一个字符串文字,也没有格式参数[-Werror = format-security]

14

我正在使用cocos2d-x-2.1.4制作游戏,但是当我尝试在Android上构建它时,它失败了,并显示错误:format not a string literal and no format arguments [-Werror=format-security],出现在CCCommon.cpp文件中。

然而,当我检查有问题的那行代码时,它是完全正常的。该文件还可以在使用Visual Studio和XCode构建WIN32和iOS时成功构建。

错误日志如下:

C:/Development/External/cocos2d-2.1rc0-x-2.1.3/projects/Game_C2DX213/proj.android/../../..//cocos2dx/platform/android/CCCommon.cpp: In function 'void cocos2d::CCLog(char const*, ...)':
/cygdrive/c/eclipse/android-ndk-r9/build/core/build-binary.mk:348: recipe for target `obj/local/armeabi/objs/cocos2dx_static/platform/android/CCCommon.o' failed
C:/Development/External/cocos2d-2.1rc0-x-2.1.3/projects/Game_C2DX213/proj.android/../../..//cocos2dx/platform/android/CCCommon.cpp:44:72: error: format not a string literal and no format arguments [-Werror=format-security]
C:/Development/External/cocos2d-2.1rc0-x-2.1.3/projects/Game_C2DX213/proj.android/../../..//cocos2dx/platform/android/CCCommon.cpp: In function 'void cocos2d::CCLuaLog(char const*)':
make: Leaving directory `/cygdrive/c/Development/External/cocos2d-2.1rc0-x-2.1.3/projects/Game_C2DX213/proj.android'
C:/Development/External/cocos2d-2.1rc0-x-2.1.3/projects/Game_C2DX213/proj.android/../../..//cocos2dx/platform/android/CCCommon.cpp:54:77: error: format not a string literal and no format arguments [-Werror=format-security]
cc1plus.exe: some warnings being treated as errors
2个回答

24

Application.mk 文件在哪里?你的意思是 $COCOS2DX_HOME/cocos2dx/Android.mk 下的 Android.mk 文件吗?我尝试在该文件中将 "APP_CFLAGS += -Wno-error=format-security" 作为第一行,但仍然出现错误。 - igrek
3
这是由于android-ndk-r9引起的问题,你可以从android-ndk-r9/build/core/default-build-commands.mk中删除-Werror=format-security。以下内容对我有帮助,谢谢。 - igrek
1
@igrek - 如果我理解正确,你的答案是不同的,涉及到更改Android的文件而不是开发者的项目文件。 - AlikElzin-kilaka
1
@kilaka - 是的,所以我已经修补了Android NDK本身。最好更改项目文件而不是NDK,但对我来说没有起作用 :( - igrek
1
你不应该修补 NDK。在 Android make 文件中有一个名为 LOCAL_DISABLE_FORMAT_STRING_CHECKS 的标志来控制它。 - Tolik Odukha
1
APP_CFLAGS += -Wno-error=format-security 没有生效,LOCAL_DISABLE_FORMAT_STRING_CHECKS := true 有帮助。 - Eugene Dudnyk

13

您需要在Android.mk文件中定义以下内容

LOCAL_DISABLE_FORMAT_STRING_CHECKS := true

该设置将禁用格式字符串检查。


如果我正在使用Android Studio,你会怎么做?编辑Android.mk似乎不起作用。 - VJ Vélan Solutions
@harikris 我认为你是通过gradle和“新的构建系统”进行编译的。它会创建临时的Android.mk文件并使用它来代替你的文件。你需要阅读文档并找到提供gragle自定义android.mk路径的关键。或者你可以节省大量时间,像往常一样使用ndk-build。 - Tolik Odukha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接