我正在 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)
谢谢
海湾合作委员会(海合会)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 或更高版本。
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 软件集合在重新引导/注销后保留?在红帽知识库中。
归档时间: |
|
查看次数: |
39356 次 |
最近记录: |