gpt4 book ai didi

c++ - 当 -std=c++17 在编译器输出中时,编译器请求通过使用 -std++17 标志为 std::variant 启用 c++17 支持

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:50:28 28 4
gpt4 key购买 nike

前段时间我在让 std::variant 在 QtCreator 项目中工作时遇到了问题,在这里面临类似的提示:

Can't use c++17 features using g++ 7.2 in QtCreator

我解决了这个问题,并且在这个项目上已经愉快地工作了一段时间,没有进一步的问题。这是在 ubuntu 14.04 上运行的,使用 GCC 7.2.0 构建,也在 clang 5.0 下构建。

两天前,我备份了所有内容,安装了最新的 QtCreator,再次安装了我的所有工具(gcc 7.2.0 和 clang 5.0),检索了我的项目并尝试构建。构建失败,说明:

/usr/include/c++/7.2.0/bits/c++17_warning.h:32: error: This file requires compiler and library support for the ISO C++ 2017 standard. This support must be enabled with the -std=c++17 or -std=gnu++17 compiler options.

在我的项目文件中,我已经有了这个:

QMAKE_CXXFLAGS += -std=c++17

而且我可以在编译器输出的短语“-std=c++17”中看到。这是第一个错误之前的完整编译器输出:

15:08:37: Running steps for project AIRadioQt...
15:08:37: Skipping disabled step qmake.
15:08:37: Starting: "/usr/bin/make"
/home/pete/Programming/Qt/5.10.0/gcc_64/bin/qmake -o Makefile ../AIRadioQt/AIRadioQt.pro -spec linux-clang CONFIG+=debug CONFIG+=qml_debug
clang++ -c -pipe -std=c++17 -g -std=gnu++11 -Wall -W -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_DATAVISUALIZATION_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../AIRadioQt -I. -I../src -I../src/AIBase -I../src/Maths -I../src/Random -isystem /usr/local/include/csound -I../../../../Programming/Qt/5.10.0/gcc_64/include -I../../../../Programming/Qt/5.10.0/gcc_64/include/QtDataVisualization -I../../../../Programming/Qt/5.10.0/gcc_64/include/QtWidgets -I../../../../Programming/Qt/5.10.0/gcc_64/include/QtGui -I../../../../Programming/Qt/5.10.0/gcc_64/include/QtCore -I. -isystem /usr/include/libdrm -I. -I../../../../Programming/Qt/5.10.0/gcc_64/mkspecs/linux-clang -o main.o ../AIRadioQt/main.cpp
In file included from ../AIRadioQt/main.cpp:1:
In file included from ../AIRadioQt/stdafx.h:9:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0/variant:35:
/usr/bin/../lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0/bits/c++17_warning.h:32:2: error: This file requires compiler and library support for the ISO C++ 2017 standard. This support must be enabled with the -std=c++17 or -std=gnu++17 compiler options.
#error This file requires compiler and library support \
^

因此,如您所见,设置了 -std=c++17 标志。这里的标志顺序有问题吗?

下一个奇怪的事情是,无论我在 QtCreator 中使用我的 gcc 工具包还是 clang 工具包,它似乎总是在编译器输出中调用 clang,如下行所示:

clang++ -c -pipe -std=c++17 -g -std=gnu++11 -Wall -W -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_DATAVISUALIZATION_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../AIRadioQt -I. -I../src -I../src/AIBase -I../src/Maths -I../src/Random -isystem /usr/local/include/csound -I../../../../Programming/Qt/5.10.0/gcc_64/include -I../../../../Programming/Qt/5.10.0/gcc_64/include/QtDataVisualization -I../../../../Programming/Qt/5.10.0/gcc_64/include/QtWidgets -I../../../../Programming/Qt/5.10.0/gcc_64/include/QtGui -I../../../../Programming/Qt/5.10.0/gcc_64/include/QtCore -I. -isystem /usr/include/libdrm -I. -I../../../../Programming/Qt/5.10.0/gcc_64/mkspecs/linux-clang -o main.o ../AIRadioQt/main.cpp

它在该行的末尾附近再次提到 clang 并带有此包含标志:

-I../../../../Programming/Qt/5.10.0/gcc_64/mkspecs/linux-clang

我检查了四次套件,GCC 肯定调用 GCC 和 GCC++,而 Clang 肯定调用 Clang 和 Clang++。我已经检查了可执行文件链接并逐步跟踪它们的链接路径,/usr/bin/gcc 肯定链接到/usr/bin/x86_64-linux-gnu-gcc-7 和/usr/bin/g++ 肯定链接到/usr/bin/x86_64-linux-gnu-g++-7。所以我很困惑为什么当我选择了 GCC 套件时它坚持调用 Clang 而不是 GCC!不管怎样,我的 GCC 和 Clang 版本都支持 c++17,所以这不应该是我出现问题的原因吧?

最佳答案

正如 Galik 在上面指出的那样,编译器标志“-std=gnu++11”位于标志“-std=c++17”之后,因此覆盖了它,这就是导致此错误的原因。

然而,这个额外标志在我的编译器输出中的出现目前还是个谜。它仅在使用 Clang 而不是 GCC 构建时出现,并且由于某种原因 QtCreator 在选择以下任何工具包时使用 Clang 构建:

Clang 发布、Clang 调试、GCC 调试。

但在使用此套件时不是:

GCC 版本。

我已经彻底检查了选项和工具包设置,我没有看到任何错误,所以我会为这些问题打开一个新的更合适的问题,当有人回答时,我会在我的原始问题中发布链接以防万一else看我的问题也有这些问题。

关于c++ - 当 -std=c++17 在编译器输出中时,编译器请求通过使用 -std++17 标志为 std::variant 启用 c++17 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47928266/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com