CentOS6.9にAnacondaを使ってOpenBabel 2.4.1をインストールする時にlibstdc++ライブラリが古くて起きたエラーへの対処
概要
Anacondaを使ってケモインフォマティクス環境を構築する際にOpenBabelをインストールするのに苦労したので備忘録としてまとめます。
背景
Anaconda(version1.6.3)を使ってRDKit(version2017.03.3), OpenBabel(version2.4.1)のCentOS(6.9)へのインストールを試みました。
RDKit(version2017.03.3)は以下のコードで問題なくインストールされました。
conda install -c rdkit rdkit
OpenBabel(version2.4.1)も以下のコードで問題なくインストールされるはずでした。
conda install -c openbabel openbabel
しかし、その後python(version3.6.1)を起動しOpenBabelをimportできるかテストすると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することができました!
>>> import openbabel
>>> #エラーがでなくなりました
ただ、このlibstdc++.so.6はコンパイル時のみだけでなくimport時に毎回必要なファイルのようなので、無事importできた後に整合性をとるためにbackupをとっていた元のlibstdc++.so.6に戻したら、また同じエラーが出てしまいました。
なので、複数人で共有しているサーバーなどで行う時は、(おそらく問題ないと思いますが)新しいバージョンのlibstdc++.so.6を使い続けてよいか協議の上で使うと良いと思います。
最後に
以上でCentOS6.9にOpenBabelをインストールする時につまずいたところの説明を終わります。皆様のケモインフォマティクスライフの助けになれば幸いです。ここまでお読みいただきありがとうございました。
Author And Source
この問題について(CentOS6.9にAnacondaを使ってOpenBabel 2.4.1をインストールする時にlibstdc++ライブラリが古くて起きたエラーへの対処), 我々は、より多くの情報をここで見つけました https://qiita.com/yamasakih/items/c83b61a523842c2cb534著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .