anaconda下import xgboostエラーversion`GLIBCXX_3.4.22' not found

9695 ワード

ubuntuでpipにxgboostをインストールした後、anacondaに入るとimportにエラーが発生します
version `GLIBCXX_3.4.22' not found

ネット上で多くの答えを探して、すべてこの問題をよく解決していないことを発見して、しかし私達はまずfindコマンドを利用してlibstdc++を探すことができます.so*
sudo find / -name 'libstdc++.so*'

この検索はグローバルで、私の結果は以下の通りです.
/usr/share/gdb/auto-load/usr/lib/i386-linux-gnu/libstdc++.so.6.0.22-gdb.py
/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22-gdb.py
/usr/lib/libstdc++.so.6.0.17
/usr/lib/i386-linux-gnu/libstdc++.so.6.0.22
/usr/lib/i386-linux-gnu/libstdc++.so.6
/usr/lib/libstdc++.so.6.0.22
/usr/lib/gcc/x86_64-linux-gnu/6/libstdc++.so
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22
/usr/lib/x86_64-linux-gnu/libstdc++.so.6
/usr/lib/libstdc++.so.6
/home/cike/.local/share/Trash/files/libstdc++.so.6.0.22
/home/cike/.local/share/Trash/info/libstdc++.so.6.0.22.trashinfo
/home/cike/anaconda3/lib/libstdc++.so
/home/cike/anaconda3/lib/libstdc++.so.6.0.21
/home/cike/anaconda3/lib/libstdc++.so.6
/home/cike/anaconda3/pkgs/libgcc-5.2.0-0/lib/libstdc++.so
/home/cike/anaconda3/pkgs/libgcc-5.2.0-0/lib/libstdc++.so.6.0.21
/home/cike/anaconda3/pkgs/libgcc-5.2.0-0/lib/libstdc++.so.6.0.22
/home/cike/anaconda3/pkgs/libgcc-5.2.0-0/lib/libstdc++.so.6
/home/cike/anaconda3/pkgs/libgcc-4.8.5-2/lib/libstdc++.so
/home/cike/anaconda3/pkgs/libgcc-4.8.5-2/lib/libstdc++.so.6.0.19
/home/cike/anaconda3/pkgs/libgcc-4.8.5-2/lib/libstdc++.so.6

上の結果に注意して、/usr/libの下にも見つかりましたし、/home/your_name/anaconda 3で見つけました.最初は/usr/libの下で操作していましたが、下のリンクの方法を使ってlibstdc++対応のバージョン(ここでは3.4.22)をダウンロードし、リンクを作成しました.
http://blog.csdn.net/xiaolong2w/article/details/23915171
最終的に上のリンクに従ってGLIBCXXを検索する
 strings /usr/lib/libstdc++.so.6 | grep GLIBC

対応するバージョンが見つかる(GLIBCXX_3.4.22)
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_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.14
GLIBC_2.4
GLIBC_2.18
GLIBC_2.3.4
GLIBC_2.17
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH

しかしanacondaに入るとimport xgboostは、まだ上のエラーが発生しているので、anacondaのディレクトリの下にあるべきかと思ったら、anacondaディレクトリに入りました
/home/your_name/anaconda3/pkgs/libgcc-4.8.5-2/lib

上記のリンクに従って、対応するバージョンのlibstdc++(ここではlibstdc+.so.6.0.2)をこのディレクトリにコピーし、libstdc++を削除します.so.6以降、このディレクトリの下にリンクを作成
rm libstdc++.so.6  
ln -s libstdc++.so.6.0.22 libstdc++.so.6  

再びanacondaに入り、import xgboostは成功しました
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 xgboost
/home/cike/anaconda3/lib/python3.6/site-packages/sklearn/cross_validation.py:44: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.
  "This module will be removed in 0.20.", DeprecationWarning)
>>> import xgboost
>>>