pip更新失败_Centos更新lib库[踩坑记录]

最近在Centos7 64位服务器上搭建环境,遇到了两个问题:其一:/lib/libstdc++.so.6 : version 'GLIBCXX3.4.20' not found,其二:ImportError:/lib64/libc.so.6 : version' GLIBC_2.18' not found。花了一个下午才搞定,其中好几次都失败了,在这里记录一下。

由于我的环境已经配置好,所以我的截图会和之前不同,这里会对图进行特别说明,请注意。要注意每个命令,切忌不要拼写输入错误~~

[问题一]上述错误时由于libstdc++.so.6没有对应的GLIBCXX造成的,可通过如下命令查看:

# strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

图1说明:没有配置好的话红色框中的内容是没有的,我是下载了libstdc++.so.6.0.24。

60a21d1d948b793ae6c13df2f9a4e51f.png
图1

你会发现你自己的少了GLIBCXX_3.4.20,解决办法是升级libstdc++。

# yum provides libstdc++.so.6

图2说明:这里显示的是32位的libstdc++.so.6,从后缀名.i686可以看出,实际进行升级的时候根据你的centos系统来,我的是64位,所以执行命令的时候后缀需要进行修改(.x86_64),【这是第一个坑,一开始没注意总是升级失败或者后面更新GLIBC会出现64位和32位版本不匹配的问题】。

e9578ecb6706431971c06bf22c5cafb1.png
图2
# yum install libstdc++-4.8.5-36.el7.x86_64 --setopt=protected_multilib=false
  1. 从路径/usr/local/lib64/拷贝文件libstdc++.so.6.0.20(或者更高版本,例如libstdc++.so.6.0.24)到路径/usr/lib64。
# cp /usr/local/lib64/libstdc++.so.6.0.24 /usr/lib64

2. 删除/usr/lib64原来的软连接libstdc++.so.6

# cp /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.back  #建议先备份
# rm /usr/lib64/libstdc++.so.6

3. 在路径/usr/lib64,打开ternimal,输入软连接命令,重新建立软连接:

# ln libstdc++.so.6.0.24 libstdc++.so.6

4. 重新执行命令:

# strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

正常操作的话若会新出现图1中红色框内的内容,表示已经OK了。

但是,在我的centos服务器中在/usr/local/lib64/下根本就没有libstdc++.so.6.24,这个直接在CSDN上搜进行下载,放到/usr/local/lib64/目录下,就是假装它有,然后执行上述步骤1,2,3,4即可。

这里我把libstdc++.so.6.20(4)上传到网盘:链接:https://pan.baidu.com/s/1xpTVR5e_XeUS2xoCoKmgfQ

提取码:e79u 如果链接失效可联系我。

[问题二]这时运行Tensorflow的程序,又提示另外一个错误:ImportError:/lib64/libc.so.6 : version 'GLIBC_2.18' not found。

查看glibc详情,执行命令:

# strings /lib64/libc.so.6 | grep GLIBC_

说明:我的环境中已经安装好了glibc_2.18,所以显示会有,如红色框所示。

cfcd42a460cd30cadeca399c55dc23ad.png

解决办法:

  1. 下载并解压对应的glibc版本,在https://ftp.gnu.org/gnu/glibc/里下载对应版本,如:glibc-2.18.tar.gz,也可以直接在ternimal下执行:(这里建议最好把这个包下载在/opt/路径下)
# wget https://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
# tar -zxvf glibc-2.18.tar.gz

2. 进行编译安装

a.进入安装目录:
# cd glibc-2.18
b.创建编译安装目录:
# mkdir build
c.配置:
# ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
(其实上一步仅执行:# ../configure --prefix=/usr)也行。
 d.编译安装
# make -j20  (-j20的数字根据自己系统)
# make install

3. 编译成功后应该就OK啦,可以执行Tensorflow程序。

注意在第2步中make -j20的时候可能会遇到问题:LD_LIBRARY_PATH shouldn't contain the current directory。

解决办法是删除LD_LIBRARY_PATH变量的内容:

a. 显示原来的路径
# echo $LD_LIBRARY_PATH
// :/opt/glibc-2.18/lib
b. 设置其路径为空
# LD_LIBRARY_PATH=

等上述编译安装make -j20和make install安装成功之后再重新添加LD_LIBRARY_PATH。

# vim /etc/profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/glibc-2.18/lib
//wq后保存退出
# source /etc/profile

这里另外补充一句,在pip安装其他包的时候可以加上国内镜像源(豆瓣),速度会更快,命令为:

# pip install matplotlib -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

以上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值