CentOS 7にgcc 8.3.0をインストールする

CentOS 7にRuby 2.6.3をソースインストールしようとしたところ、make installでエラーが発生。
gccのバージョンを上げれば解決するかもしれないと思い、gcc 8.3.0をインストールすることにしました。

ちなみに、元々インストールされていた(というか、yumでインストールした)gccのバージョンは以下の通り。

$ $ /usr/bin/gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)
〜省略〜

こちらの記事を見なが自分の環境に合わせてちょこちょこオプションを変更し、インストールしました。
具体的には、インストールディレクトリを/usr/local、CPUのコア数を2にしました。

作業手順

以下、$HOME/srcにて作業を行うものとします。

必要なファイルをダウンロードします。

$ wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-8.3.0/gcc-8.3.0.tar.gz
$ wget https://ftp.gnu.org/gnu/gmp/gmp-6.1.0.tar.bz2
$ wget https://ftp.gnu.org/gnu/mpfr/mpfr-3.1.4.tar.bz2
$ wget https://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz
$ wget https://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2

インストールディレクトリの作成

$ mkdir /usr/local/gcc8.3.0

gmpのインストール

$ tar xvf gmp-6.1.0.tar.bz2
$ ./configure --prefix=/usr/local/gcc8.3.0 --enable-cxx
$ make
$ make check
$ sudo make install

mpfrのインストール

$ tar xvf mpfr-3.1.4.tar.bz2
$ cd mpfr-3.1.4/
$ ./configure --prefix=/usr/local/gcc8.3.0 --with-gmp=/usr/local/gcc8.3.0
$ make -s -j2
$ make -s check
$ sudo make install

mpcのインストール

$ tar xvf mpc-1.0.3.tar.gz
$ cd mpc-1.0.3/
$ ./configure --prefix=/usr/local/gcc8.3.0 --with-gmp=/usr/local/gcc8.3.0 --with-mpfr=/usr/local/gcc8.3.0
$ make -s -j4
$ make check -s -j2
$ sudo make install

islのインストール

$ tar xvf isl-0.18.tar.bz2
$ cd isl-0.18/
$ ./configure --prefix=/usr/local/gcc8.3.0 --with-gmp-prefix=/usr/local/gcc8.3.0
$ make -j2
$ make check
$ make install

gccのインストール

$ tar gcc-8.3.0.tar.gz
$ cd gcc-8.3.0
$ mkdir build
$ cd build
$ ../configure --disable-multilib --enable-languages=c,c++,fortran \ 
--prefix=/usr/local/gcc8.3.0 --with-gmp=/usr/local/gcc8.3.0 \
--with-mpc=/usr/local/gcc8.3.0 --with-mpfr=/usr/local/gcc8.3.0 \
--with-isl=/usr/local/gcc8.3.0
$ unset LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE
$ LD_LIBRARY_PATH=/usr/local/gcc8.3.0/lib make -j2
$ sudo make install

~/.bashrcに以下を追加する

export GCC_HOME=/usr/local/gcc8.3.0
export PATH=$GCC_HOME/bin:$PATH
export LD_LIBRARY_PATH=$GCC_HOME/lib64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$GCC_HOME/lib:$LD_LIBRARY_PATH
export LIBRARY_PATH=$GCC_HOME/lib64:$LIBRARY_PATH
export LIBRARY_PATH=$GCC_HOME/lib:$LIBRARY_PATH

以下の内容で、/etc/ld.so.conf.d/gcc8.3.0.confを作成する。

/usr/local/gcc8.3.0/lib
/usr/local/gcc8.3.0/lib64
/usr/local/gcc8.3.0/lib
/usr/local/gcc8.3.0/lib64

ライブラリのキャッシュを更新する。

$ sudo ldconfig
ldconfig: /usr/local/gcc8.3.0/lib/libisl.so.15.3.0-gdb.py は ELF ファイルではあ りません - 先頭に誤ったマジックバイトを持っています。

ldconfig: /usr/local/gcc8.3.0/lib64/libstdc++.so.6.0.25-gdb.py は ELF ファイルではありません - 先頭に誤ったマジックバイトを持っています。

何やらエラーメッセージが表示されるが、気にしなくても大丈夫らしい。

visudoコマンドを実行し、secure_pathにgcc 8.3.0のコマンド検索パスを追加する。
この作業をやっておかないと、sudo gccコマンドを実行した際にパッケージインストールされたgccが実行されてしまう。

$ sudo visudo

88行目付近。
(変更前)

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

(変更後)

Defaults    secure_path = /usr/local/gcc8.3.0/bin:/sbin:/bin:/usr/sbin:/usr/bin

gccのバージョンを調べて、ちゃんとインストールされたことを確認する。

$ gcc --version
gcc (GCC) 8.3.0
Copyright (C) 2018 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.

$ sudo gcc --version
gcc (GCC) 8.3.0
Copyright (C) 2018 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.

参考記事

オフライン環境でgcc 8.3.0をソースからビルドする