libdl.so.2 undefined symbol _dl_vsym version GLIBC_PRIVATE
千万别盲目安装新版本的glibc
今天来了个新项目,依赖新版本的glibc,旧版本的glibc会报错如下
/lib64/libc.so.6: version `GLIBC_2.33' not found
/lib64/libc.so.6: version `GLIBC_2.34' not found
查看本机的版本
strings /lib64/libc.so.6 |grep GLIBC_
可以发现最大只支持到GLIBC_2.30, 与需要的GLIBC_2.33不符合
GLIBC_2.29
GLIBC_2.30
GLIBC_PRIVATE
升级新版本的glibc
-
开两个console命令行窗口,一个执行su进入root备用,另一个用于编译安装glibc
-
从官网下载
https://ftp.gnu.org/gnu/glibc/
首先第一反应是下最新版本glibc-2.38.tar.xz
下载后解压
tar -xvf glibc-2.38.tar.xz -
然后编译
cd glibc-2.38/
mkdir build/
cd build/
…/configure --prefix=/usr/local --disable-sanity-checks
make -j6 -
注意编译完,千万别急着make install,要先测试下
否则所有本机命令都可能出错:
libdl.so.2 undefined symbol _dl_vsym version GLIBC_PRIVATE
是所有命令,包括sudo , ls , cp等,也就是咱们的电脑变砖了。
建议在build目录下,执行测试指令如下
LD_PRELOAD=./libc.so.6 ls
如果报错或崩溃就有问题,就不要升级glibc了。
升级glibc导致系统变砖恢复
su命令行修复
如果已经安装了新的glibc导致系统变砖,可以不重启先抢救下,
如果当前是root权限(就是当前命令行符是#号), 还可以现场修复, 比如从2.31升级,则可以还原到2.31
LD_PRELOAD=/lib64/libc-2.31.so rm -rf /lib64/libc.so.6
LD_PRELOAD=/lib64/libc-2.31.so ln -s /lib64/libc-2.31.so /lib64/libc.so.6
U盘制作启动盘修复
如果没有root权限(就是当前命令行符是$号)sudo, su这时候是用不了的,所以大部分系统得用u盘启动进去修复了。
- 比如我的是opensuse,则就从官网下载opensuse的iso,制作个启动U盘
- 用U盘启动,进入Rescure System项(就是不进安装项)
- 比如/dev/sdb5是我们的系统盘,则mount /dev/sdb5 /mnt
- rm /lib64/libc.so.6
- ln -s /lib64/libc-2.31.so /lib64/libc.so.6
再重启就恢复正常了。
作者:帅得不敢出门 原创文章谢绝转载收录
原文地址:https://blog.csdn.net/zmlovelx/article/details/136045876
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!