1.環境
$ uname -a Linux l01 3.10.0-327.18.2.el7.x86_64 #1 SMP Thu May 12 11:03:55 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux $ cat /etc/centos-release CentOS Linux release 7.2.1511 (Core)
2.GCCのダウンロード
GCCと依存パッケージのGMP,MPC,MPFRをダウンロードする
GCC – ftp.tsukuba.wide.ad.jp
GMP- gmplib.org
MPC – ftp.gnu.org
MPFR – www.mpfr.org
3.コンパイル&インストール
各パッケージにそれぞれ依存関係があるので、ビルドの順番は以下でなければならない。
コンパイルに結構時間かかるので(特にGCC)、コンパイルマシンのCPUコア数に応じてmake -j[並行プロセス数]を使って高速化する。
make -j$(nproc) を使ってCPUコアの自動判断もできる.
$ tar xJf gmp-6.1.0.tar.xz $ cd gmp-6.1.0/ [gmp-6.1.0]$ ./configure [gmp-6.1.0]$ make -j24 [gmp-6.1.0]# make install $ tar xJf mpfr-3.1.4.tar.xz $ cd mpfr-3.1.4/ [mpfr-3.1.4]$ ./configure --with-gmp=/usr/local/ [mpfr-3.1.4]$ make -j24 [mpfr-3.1.4]# make install $ tar xf mpc-1.0.3.tar.gz $ cd mpc-1.0.3 [mpc-1.0.3]$ ./configure [mpc-1.0.3]$ make -j24 [mpc-1.0.3]# make install $ tar xf gcc-5.3.0.tar.bz2 $ cd gcc-5.3.0 [gcc-5.3.0]$ mkdir build [gcc-5.3.0]$ cd build [build]$ ../configure --enable-shared --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++ --disable-multilib --disable-bootstrap --with-arch_32=x86-64 --build=x86_64-redhat-linux [build]$ make -j24 [build]# make install
4.セッティング
/usr/localにインストールしたので、PATHはデフォルトで通っているのでとくに設定なしで使えるはず。
新しい方のgccでコンパイルしたプログラムを実行するとGLIBCXXのバージョンが古いというエラーが出る可能性があります。インストールしたgccのライブラリをldconfigの設定ファイルに追加して、ldconfigを実行してライブラリのデータベースを更新する必要があります。
sudo bash -c "echo '/usr/local/lib' >> /etc/ld.so.conf.d/00-local.conf" sudo bash -c "echo '/usr/local/lib64' >> /etc/ld.so.conf.d/00-local.conf"
「00-」を付ける理由は優先度を一番高くするためです。システムのライブラリがここで追加するライブラリよりも優先度が高いと追加の意味なくなります。
ldconfigを実行する
$ sudo ldconfig -v | grep libstdc libstdc++.so.6 -> libstdc++.so.6.0.21 <<-- 新しい方のライブラリが追加されました libstdc++.so.6 -> libstdc++.so.6.0.19