cc1plus:错误:-Werror=literal-suffix:没有选项-Wliteral-suffix

Posted

技术标签:

【中文标题】cc1plus:错误:-Werror=literal-suffix:没有选项-Wliteral-suffix【英文标题】:cc1plus: error: -Werror=literal-suffix: no option -Wliteral-suffix 【发布时间】:2013-10-03 06:26:11 【问题描述】:

我在尝试为 android 编译 Qt 5(在 linux x86_64 上)时遇到此错误:

cc1plus: error: -Werror=literal-suffix: no option -Wliteral-suffix

有人见过或知道如何解决吗?

编译器版本为“arm-linux-androideabi-g++ (GCC) 4.7”

发生错误时make正在运行的整个编译命令:

/home/triumph/Documents/android-ndk-r8e/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ -c -Wno-psabi -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -DANDROID -Wa,--noexecstack -std=gnu++0x -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -Wno-error=strict-overflow -Wno-error=literal-suffix -g -g -gdwarf-2 -marm -O0 -fno-omit-frame-pointer -fvisibility=hidden -fvisibility-inlines-hidden -Wall -Wno-psabi -W -D_REENTRANT -fPIC -DQT_NO_PRINTER -DQT_NO_PRINTDIALOG -DQT_NO_LIBUDEV -DQT_NO_XCB -DQT_NO_XKBCOMMON -DQT_NO_USING_NAMESPACE -DQT_BUILD_CORE_LIB -DQT_BUILDING_QT -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_BEFORE=0x050000 -DPCRE_HAVE_CONFIG_H -DQT_CORE_LIB -I../../mkspecs/android-g++ -I. -I../../include -I../../include/QtCore -I../../include/QtCore/5.2.0 -I../../include/QtCore/5.2.0/QtCore -Iglobal -I../3rdparty/pcre -I../3rdparty/harfbuzz/src -I../3rdparty/md5 -I../3rdparty/md4 -I../3rdparty/sha3 -I.moc/debug-shared -I/home/triumph/Documents/android-ndk-r8e/sources/cxx-stl/gnu-libstdc++/4.7/include -I/home/triumph/Documents/android-ndk-r8e/sources/cxx-stl/gnu-libstdc++/4.7/libs/armeabi-v7a/include -I/home/triumph/Documents/android-ndk-r8e/platforms/android-9/arch-arm/usr/include -o .obj/debug-shared/qabstractanimation.o animation/qabstractanimation.cpp

【问题讨论】:

你按照官方的搭建说明操作了吗? 【参考方案1】:

问题是对 qt_common.qrf 的修复。

在 GCC 4.6 到 4.8 的代码块中添加了以下行,但它引用了添加到 GCC 4.7 的编译器指令,因此在与 GCC 4.6 一起使用时会产生失败的 Makefile

            android: QMAKE_CXXFLAGS += -Wno-error=literal-suffix

解决方法是修改文件并在该行添加条件:

        contains(ver, "4\\.[78]")  // Doesn't apply to 4.6
            android: QMAKE_CXXFLAGS += -Wno-error=literal-suffix
    

【讨论】:

【参考方案2】:

我遇到了同样的错误。我通过从 Makefile (./qt5/qtbase/src/corelib/) 的 CXXFLAGS 行中删除“-Wno-error=literal-suffix”来解决这个问题。

我还在 corelib/global/qlogging.cpp 中的 switch 语句中添加了一些 default: 条目,它处理了 msgType(例如 QtFatalMsg:等),因为编译器抱怨 QtTraceMsg 没有被处理。我将默认情况视为“警告”(将其视为致命错误可能更安全)。

附言我使用当前的 git (5.2alpha) 和 Laszlo 的“官方构建说明”建议的自定义 ndk-r8e 版本遇到了错误。使用带有 qt git tag v5.1.1 的 google 最新的 ndk-r9 时我没有收到此错误(我不知道是不同的 ndk 还是不同的 git 版本造成了差异)。

【讨论】:

【参考方案3】:

在使用带有自定义 android-ndk-r8e 的 5.2.0-alpha1 标签时,我遇到了同样的问题。

通过切换到 v5.1.1 进行修复:

清理您之前的构建尝试。使用

git clean -f

在您的 qt5 目录以及任何脏的子模块目录中。之后,从您的 qt5 目录中:

git checkout v5.1.1
git submodule update --recursive

用你的 QT ./configure 命令(和任何参数)重新配置,然后 make。

【讨论】:

以上是关于cc1plus:错误:-Werror=literal-suffix:没有选项-Wliteral-suffix的主要内容,如果未能解决你的问题,请参考以下文章

错误:数组下标高于 std::vector::insert 的数组边界

编译错误:“g++:尝试执行 'cc1plus' 时出错:execvp:没有这样的文件或目录”

编译器选项在 -Wall -Werror 之后发出错误警告

Litera同意收购领先的机器学习合同分析公司Kira Systems

-Werror=C 中的严格别名错误

Android源码编译Werror类型错误处理