CentOS6.x
chemoinformatics
Anaconda
OpenBabel

CentOS6.9にAnacondaを使ってOpenBabel 2.4.1をインストールする時にlibstdc++ライブラリが古くて起きたエラーへの対処

More than 1 year has passed since last update.


概要

Anacondaを使ってケモインフォマティクス環境を構築する際にOpenBabelをインストールするのに苦労したので備忘録としてまとめます。


背景

Anaconda(version1.6.3)を使ってRDKit(version2017.03.3), OpenBabel(version2.4.1)のCentOS(6.9)へのインストールを試みました。

RDKit(version2017.03.3)は以下のコードで問題なくインストールされました。


RDKitのインストール

conda install -c rdkit rdkit


OpenBabel(version2.4.1)も以下のコードで問題なくインストールされるはずでした。


OpenBabelのインストール

conda install -c openbabel openbabel


しかし、その後python(version3.6.1)を起動しOpenBabelをimportできるかテストするとimportできませんでした :thinking:


OpenBabelのimport

Python 3.6.1 |Anaconda custom (64-bit)| (default, May 11 2017, 13:09:58) 

[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import openbabel
Traceback (most recent call last):
File "/home/yamasakih/.pyenv/versions/anaconda-4.0.0/envs/cheminfo/lib/python3.6/site-packages/openbabel.py", line 26, in swig_import_helper
return importlib.import_module(mname)
File "/home/yamasakih/.pyenv/versions/anaconda-4.0.0/envs/cheminfo/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 978, in _gcd_import
File "<frozen importlib._bootstrap>", line 961, in _find_and_load
File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 648, in _load_unlocked
File "<frozen importlib._bootstrap>", line 560, in module_from_spec
File "<frozen importlib._bootstrap_external>", line 922, in create_module
File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
ImportError: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /home/yamasakih/.pyenv/versions/anaconda-4.0.0/envs/cheminfo/lib/python3.6/site-packages/_openbabel.so)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/yamasakih/.pyenv/versions/anaconda-4.0.0/envs/cheminfo/lib/python3.6/site-packages/openbabel.py", line 29, in <module>
_openbabel = swig_import_helper()
File "/home/yamasakih/.pyenv/versions/anaconda-4.0.0/envs/cheminfo/lib/python3.6/site-packages/openbabel.py", line 28, in swig_import_helper
return importlib.import_module('_openbabel')
File "/home/yamasakih/.pyenv/versions/anaconda-4.0.0/envs/cheminfo/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ImportError: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /home/yamasakih/.pyenv/versions/anaconda-4.0.0/envs/cheminfo/lib/python3.6/site-packages/_openbabel.so)



原因

「ImportError, GLIBCXX_3.4.15」とGoogle検索をするとこちらのブログがヒットし、こちらを読むとどうやらlibstdc++ライブラリのバージョンが古いことが原因のようです。

確かにインストールしようとしているサーバーはCentOS(6.9)と少し古いし、gccのバージョンを確認したところバージョンは4.4.7とこちらも古かったです。


対処

そこで、ブログに書いている説明の通りにgccをテンポリディレクトリでコンパイルしビルドされたlibstdc++.so.6.0.19へlibstdc++.so.6からシンボリックリンクを貼ることでOpenBabelをimportすることができました!


OpenBabelのimport

>>> import openbabel

>>> #エラーがでなくなりました

ただ、このlibstdc++.so.6はコンパイル時のみだけでなくimport時に毎回必要なファイルのようなので、無事importできた後に整合性をとるためにbackupをとっていた元のlibstdc++.so.6に戻したら、また同じエラーが出てしまいました。

なので、複数人で共有しているサーバーなどで行う時は、(おそらく問題ないと思いますが)新しいバージョンのlibstdc++.so.6を使い続けてよいか協議の上で使うと良いと思います。


最後に

以上でCentOS6.9にOpenBabelをインストールする時につまずいたところの説明を終わります。皆様のケモインフォマティクスライフの助けになれば幸いです。ここまでお読みいただきありがとうございました。