全面解决/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.22‘下没有GLIBCXX_3.4.22和ImportError: /lib64/libc.so

全面解决/usr/lib64/libstdc++.so.6: version GLIBCXX_3.4.22'下没有GLIBCXX_3.4.22和ImportError: /lib64/libc.so.6: version GLIBC_2.33’ not found

/lib64/libstdc++.so.6: version `GLIBCXX_3.4.22报错是c++环境依赖缺失
修正方案:
1.使用以下命令查看是否缺少

strings /usr/lib64//libstdc++.so.6 | grep GLIBC

查看到列表中缺少版本 `GLIBCXX_3.4.22’

将原来的/usr/lib64/libstdc++.so.6 也就是提示信息的/usr/lib64/libstdc++.so.6重命名为/usr/lib64/libstdc++.so.6-bak(自己根据实际报错信息修改)

mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6-bak

然后查找本机的拥有的libstdc++.so依赖

locate libstdc++.so

正常情况会出现很多,使用第一个命令一一验证哪个libstdc++.so版本拥有 `GLIBCXX_3.4.22’,比如搜索到一个/usr/lib/libstdc++.so.30

strings /usr/lib/libstdc++.so.30| grep GLIBC

查看后发现符合要求(不符合就继续查其它),就将/usr/lib/libstdc++.so.30复制到/usr/lib64/文件夹下

cp /usr/lib/libstdc++.so.30 /usr/lib64/

然后用新的符合要求的libstdc++.so.30建立软连接

ln -s  /usr/lib64/libstdc++.so.6.0.30 /usr/lib64/libstdc++.so.6

然后再用原来的命令检测,发现已经有包含 `GLIBCXX_3.4.22’

strings /usr/lib64//libstdc++.so.6 | grep GLIBC

至此完成
至于第二个ImportError: /lib64/libc.so.6: version `GLIBC_2.33’ not found,不要轻易修改,**如果没有这个文件会导致连接不上shell,不要问我为什么知道。**建议尝试直接使用建立软链接或者覆盖的方式,找到符合条件的文件覆盖掉。
重要的事 重要的事如果不小心修改了 /lib64/libc.so.6,此时大部分shell命令都会失效,不要慌张,更不要关闭ssh连接(不要问我为什么知道),此时要保持ssh连接不要关闭,因为关闭了就无法再连接了,只能跑系统急救了
未关闭解决方法执行以下命令(linux公社找到的解决答案)

LD_PRELOAD=/lib64/libc-2.26.so ln -s /lib64/libc-2.26.so  /lib64/libc.so.6

记住/lib64/libc-2.26.so必须是你主机存在的文件,所以根据实际情况操作。比如你将/lib64/libc.so.6改名为/lib64/libc.so.6-bak了,那么可以重新建立软链

LD_PRELOAD=/lib64/libc.so.6-bak ln -s /lib64/libc.so.6-bak  /lib64/libc.so.6

或者

sln /lib64/libc.so.6-bak /lib64/libc.so.6

当然你还可以恢复重命名再建立软链接:

LD_PRELOAD=/lib64/libc.so.6-bak mv /lib64/libc.so.6-bak /lib64/libc.so.6

建立软链如上

所以最好的办法就是直接建立软连接覆盖,或者将原来的libc.so.6复制一份作为备份,然后将新的libc.so.xx版本复制到lib64下并重命名为libc.so.6覆盖原文件,也算一种方法(理论可行)

重点 第二个libc.so.6即使找到了符合条件的文件,也可能本机内核不支持(此时还可以升级内核,看了下,放弃),坑点来了,如果你修改了第一个libstdc++.so.6,那么大概率要修改libc.so.6,因为不同版本对应不同依赖。所以此时可以找一个符合依赖关系且符合系统版本的libc.so.6,重新建立软链接,以维持建立好的新libstdc++.so.6动态依赖。否则打道回府,将第一步的libstdc++.so.6修改还原。

正常修改libc.so.6方式:
https://blog.csdn.net/u014634615/article/details/120333287
还有一种傻到关闭了ssh连接的急救
CentOS无法登录root的原因及解决方法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
情况一:
如果还连着的ssh终端,没有断开,直接执行如下命令即可恢复:

LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6

情况二:
ssh已经断开,无法新建新的ssh连接,重启系统,报错无法进入系统。
出现报错:Kernel panic - not syncing: Attempted to kill init!
处理办法
进入rescue救援模式,将链接文件复制到被删除的文件系统。
操作步骤如下:
1、开机进入BIOS设置,修改BOOT启动顺序为光盘优先启动 CD-ROM Drive;
2、重启系统后由光盘引导,进入安装启动菜单,选择“Rescue install system”救援模式;
3、进入到Rescue界面,选择Continue
4、系统挂载在/mnt/sysimage下 ,选择OK(如果要到root环境下,运行 chroot /mnt/sysimage 命令,此处不需要)
5、选择进入模式:shell 进入命令行模式,fakd是诊断模式,reboot重启电脑,这里选择shell
6、进入shell命令行,提示符为bash-4.1#
7、不要执行chroot /mnt/sysimage,因为硬盘文件系统就在该目录下,从/lib64下复制软连接即可,操作如下:
bash-4.1# cd /lib64
bash-4.1# cp -d libc.so.6 /mnt/sysimage/lib64/libc.so.6
bash-4.1# reboot
之后即可恢复正常
以上就是CentOS无法登录root的原因及解决方法 作者:云V小编 https://www.bilibili.com/read/cv14139558 出处:bilibili

你可能感兴趣的:(paddle,pythone,linux,c++,linux,开发语言,python)