QMake:系统和项目头之间突然发生冲突

问题描述 投票:0回答:1

从 gcc 6 切换到 gcc 8 时,Qt 项目停止编译,并出现以下错误:

In file included from /usr/include/qt4/QtCore/qstring.h:46,
                 from /usr/include/qt4/QtCore/QString:1,
                 from ../common/strings.h:11,
                 from /usr/include/string.h:431,
                 from /usr/include/qt4/QtCore/qlist.h:60,
                 from /usr/include/qt4/QtCore/qhash.h:48,
                 from /usr/include/qt4/QtCore/qdebug.h:46,
                 from /usr/include/qt4/QtCore/QtDebug:1,
                 from src/main.h:26,
                 from ../common/main.cpp:9:
/usr/include/qt4/QtCore/qbytearray.h:531:13: note: previous declaration ‘bool operator==(const char*, const QByteArray&)’
 inline bool operator==(const char *a1, const QByteArray &a2)

出现此类错误的原因是项目

../common/strings.h
中的遗留头文件包含在系统头文件中
/usr/include/string.h
。在 .pro 文件中,包含路径像这样列出并且没有更改。

 INCLUDEPATH += . \
               ../common
           

在这两种情况下,

/usr/include/string.h
都包含
#include <strings.h>
。为什么使用旧版本的 GCC 时问题没有出现?

c++ qmake
1个回答
0
投票

标头

strings.h
现在是系统接口的一部分:https://man7.org/linux/man-pages/man0/strings.h.0p.html

问题实际上是操作系统本身较新,而不是 GCC。在与系统名称匹配的标头位置无意中使用已弃用的

-I
会导致灾难。

© www.soinside.com 2019 - 2024. All rights reserved.