/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found



先日の日記でbitcasaのlinuxクライアントをインストールしたことをかいたが、その続き。

インストール自体はyum install ですんでしまったので簡単だった。しかし、bitcasaプログラムを実行しようとするとエラーが。

# /usr/sbin/mount.bitcasa: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /usr/sbin/mount.bitcasa)

さっそくググる。

gccが GLIBCXX_3.4.15に対応していないってこと?

ググっても英語のページしかでてこなくて、ちゃんと理解していないかもしれないけど、インストールされた/usr/lib/libstdc++.so.6 がGLIBCXX_3.4.15に対応していないということらしい。パッケージの単位としてはgccらしい。

調べ方

# strings /usr/lib/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_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

対処は GNU版gccをインストールして、ひつようなバイナリを配置して関連付ける。。。。

このへんの作業は不慣れで自信がないので、ググってたどり着いた人は要注意。ぼくはほぼしろうと同然なので疑ってかかってください。centosのレポジトリ上の最新のgccにしても改善しませんでした。(gcc-4.4.7-4.el6.i686)

GNU版gccというのはrpm形式では配布されておらず、自分でコンパイルをしないといけない。あまりやらない作業なのでドキドキ。下記記事をみながらやりました。
参考: http://cpp-dev-talk.blogspot.jp/2013/12/error-package-requires.html

# wget http://ftp.gnu.org/gnu/gcc/gcc-4.6.2/gcc-4.6.2.tar.gz
# tar xf gcc-4.6.2.tar.gz
# cd ./gcc-4.6.2/contrib/
# ./download_prerequisites
# cd ../..
# mkdir staging
# cd staging
# ../gcc-4.6.2/configure –-prefix=/opt/gcc-4.6.2
# make
(数時間まつ)
# make install
# cp /opt/gcc-4.6.2/lib/libstdc++.so.6.0.16 /usr/lib
# ln -s libstdc++.so.6.0.16 libstdc++.so.6

これでエラーがでなくなりました。めでたしめでたし。

以上