Centos 7 GCCコンパイラのアップグレード


最近のプロジェクトはC++11原子操作を使用して、コードをコンパイルすることができなくて、ヒントno matching function for call to‘atomic_init(std::atomic_uint*,unsigned int&)、資料を探してもstdatomicが見つからない.hファイルは、現在のGCCバージョンでは原子操作がサポートされていないような気がします.私のバージョンはGCC 4です.8.5.
GCC公式サイトによると、gccは4.7でc 11基準をサポートしているという.しかし、C 11の標準はstdatomicを持っていなければなりません.hというヘッダファイルは,C言語標準ライブラリとして原子操作ライブラリが付属している.この年はどうして原子操作がないのですか.しかし、gccはstdatomicを忘れた.hが加わる.このバグはバージョン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