【问题标题】:g++: error: unrecognized '-std=c++17' (what is g++ version and how to install)g++: error: unrecognized '-std=c++17' (什么是 g++ 版本以及如何安装)
【发布时间】:2020-06-05 18:46:42
【问题描述】:

我正在使用 RHEL 7.5 并尝试编译 uWebSocket (This exaple) 代码。我克隆项目并打开它。当我在 Makefile 上启动 ma​​ke 时,出现此错误;

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

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

gcc --version
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.

谢谢

【问题讨论】:

  • gcc.gnu.org/projects/cxx-status.html#cxx1z "从 GCC 5 开始提供 C++17 功能。要启用 C++17 支持,请将命令行参数 -std=c++17 添加到 g++ 命令行。或者,要启用除 C++17 功能之外的 GNU 扩展,请添加 -std=gnu++17。”你可以试试:sudo yum install g++5.0.

标签: gcc c++17 rhel7


【解决方案1】:

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++ (GCC 7.3.1)
  • yum install devtoolset-8-gcc-c++ (GCC 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-10-toolchain。这可能需要(或不需要)取决于您的具体用例。

一旦安装,运行例如scl enable devtoolset-10 bash 当你安装了devtoolset-10-gcc-c++。然后调用 g++ 将导致 GCC 10.2.1。对于脚本,在使用g++ 之前使用. /opt/rh/devtoolset-10/enable 可能更方便。

如果需要,请参阅红帽知识库中的 How can I make a Red Hat Software Collection persist after a reboot/logout?

【讨论】:

    【解决方案2】:

    用途:

    yum install devtoolset-9-toolchain
    scl enable devtoolset-9 bash
    

    【讨论】:

      【解决方案3】:

      gcc (GCC) 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 支持C++17(以及从那时起已弃用的-std=c++1z)。

      对于 GNU-C++ 方言,使用 -std=gnu++* 而不是 -std=c++*

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

      【讨论】:

        猜你喜欢
        • 2022-10-02
        • 1970-01-01
        • 1970-01-01
        • 2021-07-29
        • 1970-01-01
        • 2016-04-19
        • 1970-01-01
        • 2012-10-08
        • 1970-01-01
        相关资源
        最近更新 更多