我正在使用RHEL 7.5,并尝试编译uWebSocket(This exaple)代码。我克隆项目并打开它。当我在Makefile上启动make时,出现此错误;
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(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年发布。
[C ++ 17由GCC v8通过-std=c++17
(以及从那时起不推荐使用的-std=c++1z
)支持。
对于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)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.1.1)请注意,您可以使用以下方法安装特定版本的整个devtoolset: yum install devtoolset-9-toolchain
。根据您的特定用例,可能需要(也可以不需要)。
一旦安装,请运行例如安装scl enable devtoolset-9 bash
时的devtoolset-9-gcc-c++
。调用g++
将转至GCC 9.1.1。对于脚本,在使用. /opt/rh/devtoolset-9/enable
之前先使用g++
可能会更方便。
如果需要,请参阅Red Hat知识库中的How can I make a Red Hat Software Collection persist after a reboot/logout?。