Qt调试问题记录(持续更新)

前言

本人调试Qt所遇到的问题均会记录在此,方便回溯。

调试平台

  • Qt版本:5.12.11
  • Host PC:Ubuntu-20.04
  • Target:ARM/ARM64

调试记录

configure报C++11缺失

这是在交叉编译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。亲测两种修改方式均有效,至于是否有差别暂未深入研究。

g++编译选项不支持

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),最终只能重新解压一份全新的源码进行操作,即可解决。
目前原因不明,有了解根因的大哥麻烦留言指点一二,谢谢!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值