ubuntu升级GLIBC高版本方法,解决:version `GLIBC_2.34‘ not found

[复制链接]
发表于 2026-10-6 12:43:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

把编译好的程序拷到 Ubuntu 上跑,一执行就甩一句 version `GLIBC_2.34' not found,明明在另一台机器上跑得好好的。这类问题不是程序坏了,也不是系统坏了,而是程序编译时链接的 glibc 比当前系统自带的版本新。下面按「确认 → 升级运行库 → 校验 → 不升级时的替代方案」四步走一遍。

一、先确认到底缺哪个符号、缺在哪

glibc 是系统级的运行库,版本号出现在动态链接阶段。先看看程序依赖了哪些库:

ldd ./your_program

如果某一行指向 libc.so.6 且程序在低版本系统上跑,就会报上面那个错。更精确的办法是把缺失符号查出来:

strings /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC_

输出里只有 GLIBC_2.2.5 到 GLIBC_2.31,而程序需要 2.32 以上,就坐实了是 glibc 版本低。

二、补一条新版本的软件源

Ubuntu 22.04 的 jammy 仓库里带的 libc6 是 2.35,够用;如果你的系统是 20.04(focal),默认只到 2.31,就需要先把源指到 jammy。打开源列表:

sudo vi /etc/apt/sources.list

把原来的一行镜像地址后面补上发行版代号 jammy,例如:

deb http://mirrors.aliyun.com/ubuntu/ jammy main

改完刷新索引:

sudo apt update

三、升级 libc6 并校验结果

然后安装高版本运行库:

sudo apt install libc6

装完再跑一次前面的 strings 校验:除了旧的 GLIBC_2.2.5 到 GLIBC_2.31,应该多出 GLIBC_2.32 到 GLIBC_2.35 这一段,最后是 GLIBC_PRIVATE。看到这段就说明新符号已经进了运行库。

四、顺手把自定义路径加进环境变量

如果你还把编译产物放到某个自建目录,比如 /usr/local/host/bin,需要让 shell 认得它:

sudo vim /etc/bash.bashrc

在最后一行加上(路径换成你自己的):

PATH=$PATH:/usr/local/host/bin

让当前会话立刻生效:

source /etc/bash.bashrc

注意是 bashrc 而不是 bash.bashrc 这种笔误形式,写错了不报错但也不生效。

五、升级前必须想清楚的几件事

  • 把源从 focal 指到 jammy 属于跨大版本升级,apt 会一并拉进一批新包,务必先做一次全量 apt update && apt upgrade,别只装 libc6。
  • 升级前给关键目录留个快照或备份,出问题能回滚。
  • 生产机器上不要为了一个程序去动系统 glibc,风险远大于收益。
  • 同一台机器上不要从别的发行版拷 libc.so.6 直接覆盖,不同发行版的符号约定不一样,覆盖完可能连 ls 都起不来。

六、不动系统的替代方案

  • 把程序打进容器,用对应版本的基础镜像(比如 ubuntu:22.04 或 debian:bookworm),容器里自带够新的 glibc,宿主机完全不用改。
  • 用 patchelf 给程序改动态库搜索路径,指向高版本的运行时目录。
  • 回退编译机器的基础镜像,用与生产系统同版的编译环境重新出包,这是最干净的做法。

qidao123.com企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表