【无标题】

文章描述了一位开发者在CentOS系统中遇到g++版本过低导致的编译问题,以及如何通过升级g++到5.2以上版本来解决这个问题的详细步骤。这包括检查依赖包、升级gcc、处理安装冲突、使用devtoolset-7等。过程中提到了可能遇到的错误和解决方法,以及安装scl工具以切换GCC版本。
摘要由CSDN通过智能技术生成

这一个小小的错误,却耗费了我将近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 © 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.
1
2
3
证明你成功了。现在可以开心的使用-std=c++14了~

注意事项:不需要提前卸载原有的gcc、g++;若按照上述步骤不成功,可以在步骤3之前尝试yum install devtoolset-7-toolchain,可以补足一些依赖关系;在选择devtoolset时,版本不一定要与我一致,GCC version大于5即可;

祝大家成功~
————————————————
版权声明:本文为CSDN博主「蓝一潇、薛定谔的猫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42744102/article/details/107219137

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值