gcc-10.1.0をCentOS7にソースインストール

覚書です。
ところどころ省いています。
実践環境で使う場合はご注意ください。

目的

cmake-3.17.2 をインストールしようとしたところ configure で次のエラーが発生しました。

---------------------------------------------
CMake 3.14.5, Copyright 2000-2019 Kitware, Inc. and Contributors
Found GNU toolchain
C compiler on this system is: gcc
---------------------------------------------
Error when bootstrapping CMake:
Cannot find a C++ compiler that supports both C++11 and the specified C++ flags.
Please specify one using environment variable CXX.
The C++ flags are "".
They can be changed using the environment variable CXXFLAGS.
See cmake_bootstrap.log for compilers attempted.
---------------------------------------------

C++のコンパイラが古いので、C++11に対応したものが必要とのこと。

特徴

  • ソースコードからのインストール
  • 複数バージョンの共存

特定バージョンでの開発や動作確認など開発環境での用途を目的としています。

環境

実施日2020-5-20
サーバさくらのVPS 2G
OSCentOS 7.7
cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
rpm -qa | grep centos-release
centos-release-7-8.2003.0.el7.centos.x86_64

事前準備

gcc の確認

gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-23)

※これは yum で入れたものです。
このバージョンは古くてCMakeには使えませんが、本記事でインストールする gcc のコンパイルに必要です。
インストールしていない場合は
# yum install gcc

gcc-c++ の確認

g++ --version
g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-23)

※これは yum で入れたものです。
このバージョンは古くてCMakeには使えませんが、本記事でインストールする gcc のコンパイルに必要です。
インストールしていない場合は
# yum install gcc-c++

gcc-10.1.0

公式サイトからダウンロードして、/tmp  にアップロード

GCCの公式サイトに行くとダウンロードページへのリンクがあります。

トップページ右側の青いところ「Download」の「Mirrors」をクリック。
Japan: ftp.tsukuba.wide.ad.jp, ・・・ のところをクリック。
releases/ をクリック。
gcc-10.1.0/ をクリック。

http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-10.1.0/gcc-10.1.0.tar.gz

「gcc-10.1.0.tar.gz」をクリックしてダウンロードし、次の場所にアップロードします。

/tmp/gcc-10.1.0.tar.gz

※ダウンロードしたファイルは100MBちょっとなので、異常に巨大なファイルをダウンロードしていたら壊れている可能性大です。Japan以外を試してみます。

インストール

ls -la /usr/local/src
ls -la /usr/local/lib

mkdir /usr/local/src/gcc-10.1.0

cp /tmp/gcc-10.1.0.tar.gz /usr/local/src/gcc-10.1.0/gcc-10.1.0.tar.gz

cd /usr/local/src/gcc-10.1.0

tar xvzf gcc-10.1.0.tar.gz

cd gcc-10.1.0

./contrib/download_prerequisites

./configure --enable-languages=c,c++ --prefix=/usr/local/lib/gcc-10.1.0 --disable-bootstrap --disable-multilib

make

make install

/usr/local/lib/gcc-10.1.0/bin/gcc -v
/usr/local/lib/gcc-10.1.0/bin/g++ -v

エラー対応

./contrib/download_prerequisites
で次のようなエラーが出たときはbzip2をインストールします。

tar (child): lbzip2: exec
yum install bzip2

libstdc++ の入れ替え

インストール状況を確認

ls -la /usr/local/lib/gcc-10.1.0/lib64/libstd*
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
GLLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_DEBUG_MESSAGE_LENGTH

libstdc++.so.6.0.28 をコピー

cp /usr/local/lib/gcc-10.1.0/lib64/libstdc++.so.6.0.28 /usr/lib64

確認

ls -la /usr/lib64/libstd*
lrwxrwxrwx. 1 root root       19 12月 19 13:28 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.19
-rwxr-xr-x. 1 root root   991616  8月  7  2019 /usr/lib64/libstdc++.so.6.0.19
-rwxr-xr-x. 1 root root 16644856  5月 20 12:35 /usr/lib64/libstdc++.so.6.0.28

入れ替え

cd /usr/lib64
mv libstdc++.so.6 libstdc++.so.6.bak
ln -s libstdc++.so.6.0.28 libstdc++.so.6

確認

ls -la /usr/lib64/libstd*
lrwxrwxrwx. 1 root root       19  5月 20 12:37 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.28
-rwxr-xr-x. 1 root root   991616  8月  7  2019 /usr/lib64/libstdc++.so.6.0.19
-rwxr-xr-x. 1 root root 16644856  5月 20 12:35 /usr/lib64/libstdc++.so.6.0.28
lrwxrwxrwx. 1 root root       19 12月 19 13:28 /usr/lib64/libstdc++.so.6.bak -> libstdc++.so.6.0.19

確認

strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_DEBUG_MESSAGE_LENGTH
(以下省略)