Centos7 升级GCC编译器

最近项目使用C++11原子操作,编译代码无法通过,提示no matching function for call to ‘atomic_init(std::atomic_uint*, unsigned int&),查找资料,也找不到stdatomic.h文件,感觉应该是当前GCC版本无法支持原子操作,我的版本是GCC4.8.5。

有人说:因为GCC官网说:gcc在4.7就支持c11标准了。然而C11标准说:你得有stdatomic.h这个头文件,作为C语言标准库自带原子操作库。这年头怎么能没有原子操作呢?然而,gcc忘了把stdatomic.h加入进去。这个BUG在版本4.9修复了。考虑到CentOS 7的yum install gcc安装的竟然是4.8.5,所以想升级GCC版本解决该问题。

这里参考了一篇博文:https://www.vpser.net/manage/centos-6-upgrade-gcc.html

CentOS 7虽然已经出了很多年了,但依然会有很多人选择安装CentOS 6,CentOS 6有些依赖包和软件都比较老旧,如今天的主角gcc编译器,CentOS 6的gcc版本为4.4,CentOS 7为4.8。gcc 4.8最主要的一个特性就是全面支持C++11,如果不清楚什么用的也没关系,简单说一些C++11标准的程序都需要gcc 4.8以上版本的gcc编译器编译,如MySQL 8.0版本(8.0.16以上版本是C++14标准,需gcc 5.3以上版本)。

CentOS 6虽然是gcc 4.4的老旧版本,但是也可以升级gcc来安装gcc 4.8,我们今天就不采用编译安装的方法了,gcc安装起来非常费时,我们采用CentOS的一个第三方库SCL(软件选集),SCL可以在不覆盖原系统软件包的情况下安装新的软件包与老软件包共存并且可以使用scl命令切换,不过也有个缺点就是只支持64位的。

确定当前gcc版本,执行命令:gcc --version

一般如果需要升级gcc至4.8或更高版本,建议直接采用安装SCL源之后安装devtoolset-6(devtoolset-6目前gcc版本为6.3),因为devtoolset-4及之前的版本都已经结束支持,只能通过其他方法安装

我升级到8.3

yum -y install centos-release-scl
yum -y install devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils
scl enable devtoolset-8 bash

需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
如果要长期使用gcc 8.3的话:

echo "source /opt/rh/devtoolset-8/enable" >>/etc/profile

 

 

 

 

 

 

你可能感兴趣的:(编译器,c++)