错误记录

系统状态:

某天晚上,我美滋滋地边看论文边安装TensorFlow,身心非常愉悦,直到安装过程中,出现了这么一个错误 /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.19' not found 后来网上搜索解决方案,才知道是GCC版本太老了,libstdc++.so.6下没有这个3.4.19版本的glibc。

我将GCC的版本更新到4.8.1。

然后再用命令查询: strings libstdc++.so.6.0.18|grep GLIBCXX 此时已经看到了版本中有GLIBCXX_3.4.19。

(1)如果是在自己的用户目录下操作,就需要 从路径/usr/local/lib64拷贝文件libstdc++.so.6.0.18到路径/usr/lib64下 cp /usr/local/lib64/libstdc++6.0.18 /usr/lib64 (2)此时要删除原来的软链接,在这之前最好备份软链接(可以看看后面惨痛的教训) rm -r libstdc++.so.6 (3)重新创建新的软链接,链接新的库 ln libstdc++.so.6.0.20 libstdc++.so.6 (4)再执行如下指令发现,有了新的库 strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX 我以为这样就完美解决了,科科科,太naive了。

再次安装的时候,我发现它又报错了 ImportError: /lib64/libc.so.6: version GLIBC_2.17' not found 通过 strings /usr/lib64/libc.so.6 | grep GLBC_ 查询时,我发现版本只到了2.12。

哇,我又开始在网上找教程解决问题。

在安装glibc库的过程中非常完美,没有问题。

但是在那一步删除链接时出现了问题。

在上文中提到,发现ls指令不能用的问题,我没有遇到,于是我就跳过了该步骤,直接删除了libc.so.6。

我发现所有指令除了cd,一些原始简单的指令可以执行,其余都会报找不到libc.so.6的错误。

此时,我还是很淡定,没事,百度看看怎么补救,没想到解决方案还是比较简单的,再重新创建链接就可以了吧,于是,如网上所说 LD_PRELOAD=/lib64/libc-2.12.so ln -s /usr/local/glibc-2.17/lib/libc-2.17.so /lib64/libc.so.6 注意,这里的LD_PRELOAD的值必须是你原本的libc版本,我是怎么知道原来的版本呢,因为之前用strings指令查询过,版本只到了2.12。

我运行了上述指令,哇,不行还是报找不到/lib64/libc.so.6。

这时,我才开始急了,what?怎么办。

最后不断地搜索,找到了这样一条指令,执行成功啦~~~ export LD_PRELOAD=/lib64/libc-2.12.so 我开始执行了一些比较复杂的指令,发现可以执行,心情舒畅。

然而我再到/usr/lib64创建链接时,发现所有指令(除了一些简单的指令可以)还是不能执行,不断地sudo,也不能执行。

我现在才意识到,sudo都不能执行了,我是个非root用户,如果要创建系统链接,必须sudo。

到现在才知道libc.so.6是跟系统大多数指令相关的链接,删了,指令就不能执行了,连root都登不上了,只要服务器的ssh一断,我的账号也不能上了。