赞
踩
本人调试Qt所遇到的问题均会记录在此,方便回溯。
这是在交叉编译arm平台执行初始configure时遇到的,用的arm-gcc版本为5.3.1。具体错误如下:
ERROR: C++11 <random> is required and is missing or failed to compile
但当前使用的arm-gcc确认是支持c++11的,解决方式如下:
---------- 修改 qtbase/mkspecs/<your platform>/qmake.conf,添加:
QMAKE_CXXFLAGS += -std=c++11
或
CONFIG += c++11
再重新configure。亲测两种修改方式均有效,至于是否有差别暂未深入研究。
arm-linux-gnueabi-g++: error: unrecognized command line option ‘-Wshift-overflow=2’
arm-linux-gnueabi-g++: error: unrecognized command line option ‘-Wduplicated-cond’
这是在交叉编译arm平台时遇到的,用的arm-gcc版本为5.3.1,此版本的gcc的确不支持上述两个编译选项。由于本人并没有指定上述两个选项,因此在Qt Src中全局搜索,发现在如下文件中有描述:
---------- qtbase/mkspecs/features/qt_common.prf
93 } else: gcc:!intel_icc {
94 QMAKE_CXXFLAGS_WARN_ON += -Wvla
95 # GCC 5 fixed -Wmissing-field-initializers for when there are no initializers
96 lessThan(QT_GCC_MAJOR_VERSION, 5): QMAKE_CXXFLAGS_WARN_ON += -Wno-missing-field-initializers
97 # GCC 5 introduced -Wdate-time
98 greaterThan(QT_GCC_MAJOR_VERSION, 4): QMAKE_CXXFLAGS_WARN_ON += -Wdate-time
99 # GCC 6 introduced these
100 greaterThan(QT_GCC_MAJOR_VERSION, 5): QMAKE_CXXFLAGS_WARN_ON += -Wshift-overflow=2 -Wduplicat ed-cond
101 # GCC 7 has a lot of false positives relating to this, so disable completely
102 greaterThan(QT_GCC_MAJOR_VERSION, 6): QMAKE_CXXFLAGS_WARN_ON += -Wno-stringop-overflow
103 # GCC 9 has a lot of false positives relating to this, so disable completely
104 greaterThan(QT_GCC_MAJOR_VERSION, 8): QMAKE_CXXFLAGS_WARN_ON += -Wno-deprecated-copy
105 # GCC 9 introduced this
106 greaterThan(QT_GCC_MAJOR_VERSION, 8): QMAKE_CXXFLAGS_WARN_ON += -Wno-redundant-move
107 # GCC 9 introduced this
108 greaterThan(QT_GCC_MAJOR_VERSION, 8): QMAKE_CXXFLAGS_WARN_ON += -Wno-format-overflow
109 # GCC 9 introduced this
110 greaterThan(QT_GCC_MAJOR_VERSION, 8): QMAKE_CXXFLAGS_WARN_ON += -Wno-init-list-lifetime
由此可见,Qt本身也有判断,在gcc版本大于6时才会启用上述编译选项,那么为什么在我的环境中,gcc版本是5,也会包含上述选项呢?继续排查,全局搜索QT_GCC_MAJOR_VERSION发现:
---------- qtbase/mkspecs/qconfig.pri
13 QT_CONFIG += shared rpath release c++11 c++14 concurrent dbus no-pkg-config reduce_exports stl
14 QT_VERSION = 5.12.11
15 QT_MAJOR_VERSION = 5
16 QT_MINOR_VERSION = 12
17 QT_PATCH_VERSION = 11
18 QT_GCC_MAJOR_VERSION = 9
19 QT_GCC_MINOR_VERSION = 3
20 QT_GCC_PATCH_VERSION = 0
21 QT_EDITION = OpenSource
在Qt配置文件里的gcc版本居然是9.3.0,猜测是之前在同样的源码目录中使用过gcc-9.3.0交叉编译工具链进行开发,尝试执行如下clean操作:
make distclean
rm qtbase/bin/qmake
重新 configure,但未能解决,gcc版本始终无法更新至当前使用的版本(5.3.1),最终只能重新解压一份全新的源码进行操作,即可解决。
目前原因不明,有了解根因的大哥麻烦留言指点一二,谢谢!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。