end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

install gcc ver.8.3.0 from source to centos 7

mongo db を srcから installしようとしましたが、centos 7付属のgccが古かった為、 gcc ver.8.3.0 をsrcから install

$ wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-8.3.0/gcc-8.3.0.tar.gz
$ tar -xvf gcc-8.3.0.tar.gz
$ cd gcc-8.3.0cd
# 以下にて必要なライブラリ?がダウンロードされます
$ ./contrib/download_prerequisites 

$ mkdir build
$ cd build
$ ../configure \
    --prefix=/usr/local/gcc8 \
    --disable-bootstrap \
    --disable-multilib \
    --enable-languages=c,c++
$ make
$ sudo make install

g++: internal compiler error: Killed (program cc1plus) のエラー

上記の configureでは、いくつかoptionを指定していますが、 このoptionなしで、makeを実行したところ、以下のようなエラーとなりました。

g++: internal compiler error: Killed (program cc1plus)

インターネットで検索しましたが、メモリ不足が原因のようでしたので 上記のoption指定や、不要なdaemonを停止、更には make -jでなく単なる「make」によりgccのbuildができました

既存のgccをmvでバックアップ後、ln -s で配備

今回の gcc ver.8.30は /usr/local/gcc8 へ installし /usr/bin/gcc や /usr/bin/g++ 、/lib64/libstdc++.so.6 はmvでバックアップし ln -s で置き換え?しています。

$ sudo mv /usr/bin/gcc /usr/bin/gcc.20190810
$ sudo mv /usr/bin/g++ /usr/bin/g++.20190810
$ sudo ln -s /usr/local/gcc8/bin/gcc /usr/bin/gcc
$ sudo ln -s /usr/local/gcc8/bin/g++ /usr/bin/g++

$ sudo mv /lib64/libstdc++.so.6 /lib64/libstdc++.so.6.20190810
$ sudo ln -s /usr/local/gcc8/lib64/libstdc++.so.6.0.25 libstdc++.so.6

ちなみに libstdc++.so.6 の ln -s を行う前は、mongod 起動時に 次のエラーが表示されていました。

$ sudo /usr/local/mongodb/bin/mongod -f /etc/mongod.conf
/usr/local/mongodb/bin/mongod: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /usr/local/mongodb/bin/mongod)
/usr/local/mongodb/bin/mongod: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.22' not found (required by /usr/local/mongodb/bin/mongod)
/usr/local/mongodb/bin/mongod: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /usr/local/mongodb/bin/mongod)
/usr/local/mongodb/bin/mongod: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /usr/local/mongodb/bin/mongod)

また、 ln -s libstdc++.so.6 後、GLIBCXX_3.4.20 等が含まれることの確認は 次のように strings + grep で行っています。

$ strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX