g++: 错误:unrecognized command line option ‘-std=c++14’
这一个小小的错误,却耗费了我将近12个小时来解决。现在已经是凌晨,记录一下,希望能帮到大家。
首先,这个错误很明显了,g++版本不够,在stackoverfow上,得知-std=c++14需要g++5.2以上,而centos默认的g++只有4.8.5。
所以,所有要做的事情,是升级g++。
由于一开始对这方面不了解,走了许多弯路,现在把干货归纳如下:
- 输入 yum list | grep gcc 看是否有devtoolset-7-gcc、devtoolset-7-gcc-c++.x86_64 等依赖包可供选择。如果没有,进入步骤2,否则进入步骤3。
- 你可能需要更换镜像源或者将原来的yum卸载,更换为非centos自带的yum。我推荐用后者,因为若只更换镜像源,yum还是无法安装gcc、g++等工具,不方便。在这里,我推荐按照https://blog.csdn.net/jianm_liu/article/details/78316690 这篇博文的解决方案进行解决,非常靠谱。在按照该博主的博文进行操作的时候,可能会额外遇到几个问题,在这里记录备忘,感觉能碰到的问题我基本都碰到过了,大家操作时遇到问题看这里即可:
问题一:rpm -ivh 其中的某一个包时,出现: file xxx from install of xxx conflicts with file from xxx这是因为原来系统上含有这个包,但是版本太低,需要先把原有的包删掉。 解决方法是使用rpm -qa | grep XXX 这个包,找到原来安装过的这个包的之前的版本,然后复制它的全名,使用rpm -e 来进行卸载。(旧的yum此时应该已经被你卸载了,所以就不能用yum remove了)然后再重新安装新的包即可。
问题二:rpm -ivh 其中的某一个包时,出现:XXX包被XXX需要。解决方法是将包名复制到http://mirrors.163.com/centos/7/os/x86_64/Packages/ 网站上查找对应的包。下载下来,再用rpm安装即可。注意版本~
问题三:rpm -ivh 其中的某一个包时,出现:rpm > 某个版本 被 XXX 包 需要。这是因为rpm版本过低。在这里,https://www.cnblogs.com/ontoweb-zp/p/9268008.html这篇博文写文很详细,按照这个操作升级rpm即可。其中注意rpm升级的命令是rpm -Uvh rpm-xx.xx.xx.el7.x86_64.rpm --nodeps (后面的–nodeps千万不要漏掉)
注意一:注意版本号,下载的是哪个版本,就要换成自己的版本。
注意二:注意架构,比如我的是X86,那么我就只能下载.x86_64后缀的rpm包。
注意三:一定要确保每一个依赖库都装上。显示安装进度100%才是安装成功。
注意四:rpm -ivh 可以同时安装两个包,在一个包被另一个需要的时候,这样更方便。 - 现在,我们安装scl工具。按顺序安装centos-release-scl-rh 、centos-release-scl 。一般情况下,yum install 这两个库就可以;若不行也不要怕,去https://centos.pkgs.org/网站,右上角的搜索框,搜索这两个库,然后选择x86的版本,点进去,找到binary的.rpm文件的url,复制,使用wget下载,然后使用rpm进行安装即可。一定要按先centos-release-scl-rh再centos-release-scl的顺序。安装好后,我们在命令行输入scl,可以看到输出:“Need at least 3 arguments.
Run scl --help to get help.”说明scl被装好了。 - 再之后,输入yum search gcc或者yum list |grep gcc,可以看到许多yum支持安装的包。现在我们安装一个更高版本的devtoolset,也就是GCC version >5的包。大家可以看到有许多devtoolset-{x}-gcc.x86_64的包,这些包就是我们要选择安装的包,可以看到冒号后面有一个注释,我选择安装了devtoolset-7-gcc-c++.x86_64以及devtoolset-7-gcc.x86_64,他们是GCC version 7的工具包,推荐大家和我选择一样的。此时,使用yum install devtoolset-7-gcc.x86_64 && yum install devtoolset-7-gcc-c++.x86_64。两个包都安装完成后,在命令行输入: scl enable devtoolset-7 bash即可切换GCC至7.3.1版本。
- 测试:输入
g++ --version
,可以看见输出
Copyright (C) 2017 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.
证明你成功了。现在可以开心的使用-std=c++14了~
注意事项:不需要提前卸载原有的gcc、g++;若按照上述步骤不成功,可以在步骤3之前尝试yum install devtoolset-7-toolchain,可以补足一些依赖关系;在选择devtoolset时,版本不一定要与我一致,GCC version大于5即可;
祝大家成功~