g++:错误:无法识别“-std=c++17”(g++ 版本是什么以及如何安装)

hhi*_*lal 4 gcc rhel7 c++17

我正在 RHEL 7.5 上工作并尝试编译 uWebSocket (此示例)代码。我克隆该项目并打开它。当我在 Makefile 上启动make时,出现此错误;

BroadcastingEchoServer uSockets/*.o -lz;
g++: error: unrecognized command line option '-std=c++17'
make: [examples] Error 1>
Run Code Online (Sandbox Code Playgroud)

主要问题是-std=c++17无法识别。我如何控制我拥有的 C++ 版本(最后是 17)以及如何安装所需的版本。

gcc --version
Run Code Online (Sandbox Code Playgroud)
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Run Code Online (Sandbox Code Playgroud)

谢谢

ema*_*uts 7

海湾合作委员会(海合会)4.8.5

  • GCC v4.8 不支持 C++17。

  • GCC v4.9 不支持 C++17。

  • GCC v5支持 C++17 ,但您需要-std=c++1z

    ISO C++ 标准的下一个修订版暂定于 2017 年进行。支持是高度实验性的,并且几乎肯定会在未来版本中以不兼容的方式发生变化。

    GCC v5 于 2015 年发布,当时他们还没有时间机器;o)

  • 这同样适用于 GCC v6 和 GCC v7(2016 年和 2017 年发布)。

  • GCC v8 通过-std=c++17(并且-std=c++1z从那时起已弃用)支持 C++17。

对于 GNU-C++ 方言,请使用-std=gnu++*代替-std=c++*.

因此,对于严肃的项目,您应该使用 GCC v8 或更高版本。


rsc*_*rsc 7

RHEL 还使用所谓的软件集合 (SCL) 提供更新版本的 GCC。根据您的情况,您可以启用此存储库(取决于您是否有工作站或服务器订阅):

  • subscription-manager repos --enable rhel-server-rhscl-7-rpms
  • subscription-manager repos --enable rhel-workstation-rhscl-7-rpms

之后您可以安装以下一个(或多个)软件包:

  • yum install devtoolset-6-gcc-c++(GCC 6.3.1,直到 RHEL 7.7)
  • yum install devtoolset-7-gcc-c++(海湾合作委员会7.3.1)
  • yum install devtoolset-8-gcc-c++(海湾合作委员会8.3.1)
  • yum install devtoolset-9-gcc-c++(GCC 9.3.1,自 RHEL 7.7 起)
  • yum install devtoolset-10-gcc-c++(GCC 10.2.1,自 RHEL 7.9 起)
  • yum install devtoolset-11-gcc-c++(GCC 11.2.1,自 RHEL 7.9 起)

请注意,您可以使用例如安装特定版本的整个开发工具集yum install devtoolset-11-toolchain。这可能需要(或不需要),具体取决于您的具体用例。

安装后,运行例如scl enable devtoolset-11 bash安装时devtoolset-11-gcc-c++。然后调用g++将导致 GCC 11.2.1。对于脚本来说,. /opt/rh/devtoolset-11/enable先使用再使用g++可能会更方便。

如果需要,请参阅如何使 Red Hat 软件集合在重新引导/注销后保留?在红帽知识库中。