複数バージョンの gcc/c++/g++ を共存させる
gcc が、make uninstall に対応していないため、ソースのインストール/アンインストールを管理する、Porg を使用。
・インストール
[root]# tar xvfz porg-0.10.tar.gz
[root]# cd porg-0.10
[root]# ./configure --disable-grop(Porg の GUI 版をインストールしない)
[root]# make -j3
[root]# make -j3 check
[root]# make -j3 install
[root]# porg -lp porg-0.10 make install ・・・ Porg 自身も管理
・ソフトウェアのインストール
[root]# porg -lp 管理名 make install
-l : ログ出力(/var/log/porg/管理名 に出力)
-p : 管理名指定
・管理しているソフトウェア一覧
[root]# porg -a -F -d -s
-a : 全て
-F : インストールされているファイル数
-d : インストールされた日付
-s : 占有しているサイズ
・管理しているソフトウェアのファイル一覧
[root]# porg -fs 管理名
・ソフトウェアのアンインストール
[root]# porg -r 管理名
[root]# ls -l /usr/lib64/libstdc*
lrwxrwxrwx. 1 root root /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.19
-rwxr-xr-x. 1 root root /usr/lib64/libstdc++.so.6.0.19
[root]# strings /usr/lib64/libstdc++.so.6 | grep -i glibcxx
GLIBCXX_3.4
GLIBCXX_3.4.1
.
GLIBCXX_3.4.19
[root]# yum install glibc glibc-devel
[root]# yum install mpfr mpfr-devel
[root]# tar xvfj gcc-4.4.7.tar.bz2
[root]# cd gcc-4.4.7
[root]# ./configure --program-suffix=-4.4 --disable-multilib(32bit または 64bit のみ)
[root]# make -j3 -s(gcc-5.x.x ではエラー gcc-4.x.x で make する)
[root]# porg -lp gcc-4.4.7 make install
[root]# cd ..
[root]# rm -vrf gcc-4.4.7
[root]# tar xvfj gcc-4.9.4.tar.bz2
[root]# cd gcc-4.9.4
[root]# ./contrib/download_prerequisites # 依存パッケージインストール
[root]# ./configure --program-suffix=-4.9 --disable-multilib
[root]# make -j3 -s
[root]# porg -lp gcc-4.9.4 make install
[root]# cd ..
[root]# rm -vrf gcc-4.9.4
[root]# tar xvfj gcc-5.4.0.tar.bz2
[root]# cd gcc-5.4.0
[root]# ./contrib/download_prerequisites
[root]# ./configure --program-suffix=-5.4 --disable-multilib
[root]# make -j3 -s
[root]# porg -lp gcc-5.4.0 make install
[root]# cd ..
[root]# rm -vrf gcc-5.4.0
[root]# tar xvfj gcc-6.1.0.tar.bz2
[root]# cd gcc-6.1.0
[root]# ./contrib/download_prerequisites
[root]# ./configure --program-suffix=-6.1 --disable-multilib
[root]# make -j3 -s
[root]# porg -lp gcc-6.1.0 make install
[root]# cd ..
[root]# rm -vrf gcc-6.1.0
[root]# tar xvfj gcc-6.2.0.tar.bz2
[root]# cd gcc-6.2.0
[root]# ./contrib/download_prerequisites
[root]# ./configure --program-suffix=-6.2 --disable-multilib
[root]# make -j3 -s
[root]# porg -lp gcc-6.2.0 make install
[root]# cd ..
[root]# rm -vrf gcc-6.2.0
[root]# gcc --version # gcc (GCC) 4.8.5
[root]# gcc-4.4 --version # gcc-4.4 (GCC) 4.4.7
[root]# gcc-4.9 --version # gcc-4.9 (GCC) 4.9.4
[root]# gcc-5.4 --version # gcc-5.4 (GCC) 5.4.0
[root]# gcc-6.1 --version # gcc-6.1 (GCC) 6.1.0
[root]# gcc-6.2 --version # gcc-6.2 (GCC) 6.2.0
[root]# c++ --version # c++ (GCC) 4.8.5
[root]# c++-4.4 --version # c++-4.4 (GCC) 4.4.7
[root]# c++-4.9 --version # c++-4.9 (GCC) 4.9.4
[root]# c++-5.4 --version # c++-5.4 (GCC) 5.4.0
[root]# c++-6.1 --version # c++-6.1 (GCC) 6.1.0
[root]# c++-6.2 --version # c++-6.2 (GCC) 6.2.0
[root]# g++ --version # g++ (GCC) 4.8.5
[root]# g++-4.4 --version # g++-4.4 (GCC) 4.4.7
[root]# g++-4.9 --version # g++-4.9 (GCC) 4.9.4
[root]# g++-5.4 --version # g++-5.4 (GCC) 5.4.0
[root]# g++-6.1 --version # g++-6.1 (GCC) 6.1.0
[root]# g++-6.2 --version # g++-6.2 (GCC) 6.2.0
[root]# ldconfig -v | grep libstdc
libstdc++.so.6 -> libstdc++.so.6.0.19
[root]# updatedb
[root]# locate libstdc++.so.6
/usr/lib64/libstdc++.so.6
/usr/lib64/libstdc++.so.6.0.13
/usr/lib64/libstdc++.so.6.0.19
/usr/local/lib64/libstdc++.so.6
/usr/local/lib64/libstdc++.so.6.0.20
/usr/local/lib64/libstdc++.so.6.0.20-gdb.py
/usr/local/lib64/libstdc++.so.6.0.21
/usr/local/lib64/libstdc++.so.6.0.21-gdb.py
/usr/local/lib64/libstdc++.so.6.0.22
/usr/local/lib64/libstdc++.so.6.0.22-gdb.py
[root]# vim /etc/ld.so.conf.d/local.conf
/usr/local/lib64
[root]# ldconfig
[root]# ldconfig -v | grep libstdc
libstdc++.so.6 -> libstdc++.so.6.0.22
libstdc++.so.6 -> libstdc++.so.6.0.21
libstdc++.so.6 -> libstdc++.so.6.0.19
/usr/local/lib64 に OS 標準より古いバージョン(libstdc++.so.6.0.13)のみだと /usr/local/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found が出現して、firefox が起動しない、cmake エラーなどの不具合が起こる。
[root]# ls -l /usr/local/lib64/libstdc*
lrwxrwxrwx 1 root root /usr/local/lib64/libstdc++.so.6 -> libstdc++.so.6.0.22
-rwxr-xr-x 1 root root /usr/local/lib64/libstdc++.so.6.0.20
-rwxr-xr-x 1 root root /usr/local/lib64/libstdc++.so.6.0.21
-rwxr-xr-x 1 root root /usr/local/lib64/libstdc++.so.6.0.22
[root]# strings /usr/local/lib64/libstdc++.so.6 | grep -i glibcxx
GLIBCXX_3.4
GLIBCXX_3.4.1
.
GLIBCXX_3.4.22
alternatives にて、バージョンを変更
・gcc
# デフォルトの gcc を移動
[root]# mv -v /usr/bin/gcc /usr/bin/gcc-4.8
# リストに追加
[root]# alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 48(優先度)
[root]# alternatives --install /usr/bin/gcc gcc /usr/local/bin/gcc-4.4 44(優先度)
[root]# alternatives --install /usr/bin/gcc gcc /usr/local/bin/gcc-4.9 49(優先度)
[root]# alternatives --install /usr/bin/gcc gcc /usr/local/bin/gcc-5.4 54(優先度)
[root]# alternatives --install /usr/bin/gcc gcc /usr/local/bin/gcc-6.1 61(優先度)
[root]# alternatives --install /usr/bin/gcc gcc /usr/local/bin/gcc-6.2 62(優先度)
[root]# alternatives --remove gcc /usr/local/bin/gcc-4.9 # 削除する場合
[root]# alternatives --config gcc # 手動選択
[root]# alternatives --auto gcc # 自動選択
[root]# alternatives --display gcc # 確認
[root]# gcc --version
・c++
# デフォルトの c++ を移動
[root]# mv -v /usr/bin/c++ /usr/bin/c++-4.8
# リストに追加
[root]# alternatives --install /usr/bin/c++ c++ /usr/bin/c++-4.8 48(優先度)
[root]# alternatives --install /usr/bin/c++ c++ /usr/local/bin/c++-4.4 44(優先度)
[root]# alternatives --install /usr/bin/c++ c++ /usr/local/bin/c++-4.9 49(優先度)
[root]# alternatives --install /usr/bin/c++ c++ /usr/local/bin/c++-5.4 54(優先度)
[root]# alternatives --install /usr/bin/c++ c++ /usr/local/bin/c++-6.1 61(優先度)
[root]# alternatives --install /usr/bin/c++ c++ /usr/local/bin/c++-6.2 62(優先度)
[root]# alternatives --remove c++ /usr/local/bin/c++-4.9 # 削除する場合
[root]# alternatives --config c++ # 手動選択
[root]# alternatives --auto c++ # 自動選択
[root]# alternatives --display c++ # 確認
[root]# c++ --version
・g++
# デフォルトの g++ を移動
[root]# mv -v /usr/bin/g++ /usr/bin/g++-4.8
# リストに追加
[root]# alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 48(優先度)
[root]# alternatives --install /usr/bin/g++ g++ /usr/local/bin/g++-4.4 44(優先度)
[root]# alternatives --install /usr/bin/g++ g++ /usr/local/bin/g++-4.9 49(優先度)
[root]# alternatives --install /usr/bin/g++ g++ /usr/local/bin/g++-5.4 54(優先度)
[root]# alternatives --install /usr/bin/g++ g++ /usr/local/bin/g++-6.1 61(優先度)
[root]# alternatives --install /usr/bin/g++ g++ /usr/local/bin/g++-6.2 62(優先度)
[root]# alternatives --remove g++ /usr/local/bin/g++-4.9 # 削除する場合
[root]# alternatives --config g++ # 手動選択
[root]# alternatives --auto g++ # 自動選択
[root]# alternatives --display g++ # 確認
[root]# g++ --version
[root]# vim /etc/yum.conf
[main]
exclude=gcc*
・dnf
[root]# vim /etc/dnf/dnf.conf
[main]
exclude=gcc*