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/anaconda3下找到了,一开始我一直在/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.22)复制到该目录,删除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
>>>