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

  1. 开两个console命令行窗口,一个执行su进入root备用,另一个用于编译安装glibc

  2. 从官网下载
    https://ftp.gnu.org/gnu/glibc/
    首先第一反应是下最新版本glibc-2.38.tar.xz
    下载后解压
    tar -xvf glibc-2.38.tar.xz

  3. 然后编译
    cd glibc-2.38/
    mkdir build/
    cd build/
    …/configure --prefix=/usr/local --disable-sanity-checks
    make -j6

  4. 注意编译完,千万别急着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盘启动进去修复了。

  1. 比如我的是opensuse,则就从官网下载opensuse的iso,制作个启动U盘
  2. 用U盘启动,进入Rescure System项(就是不进安装项)
  3. 比如/dev/sdb5是我们的系统盘,则mount /dev/sdb5 /mnt
  4. rm /lib64/libc.so.6
  5. ln -s /lib64/libc-2.31.so /lib64/libc.so.6
    再重启就恢复正常了。
    作者:帅得不敢出门 原创文章谢绝转载收录
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值