Ubuntu 22.04编译安装Glibc 2.39后,如何让ldd指向新版本?
问题
我当前运行Ubuntu 22.04虚拟机,系统默认搭载Glibc 2.35版本。出于安全漏洞修复需求,我尝试将其升级至2.39版本。
我已按照以下步骤下载源码包并完成编译安装:
sudo apt-get install gawk bison -y wget -c https://ftp.gnu.org/gnu/glibc/glibc-2.39.tar.gz tar -zxvf glibc-2.39.tar.gz && cd glibc-2.39 mkdir glibc-build && cd glibc-build ../configure --prefix=/opt/glibc-2.39 make sudo make install
编译安装过程成功完成,以下是标准输出的最后10行内容:
#23 43.04 if test -r /opt/glibc/include/gnu/stubs-64.h && cmp -s /root/workspace/teams/glibc-2.39/glibc-build/stubs.h /opt/glibc/include/gnu/stubs-64.h; \ #23 43.04 then echo 'stubs.h unchanged'; \ #23 43.04 else /usr/bin/install -c -m 644 /root/workspace/teams/glibc-2.39/glibc-build/stubs.h /opt/glibc/include/gnu/stubs-64.h; fi #23 43.05 rm -f /root/workspace/teams/glibc-2.39/glibc-build/stubs.h #23 43.05 test ! -x /root/workspace/teams/glibc-2.39/glibc-build/elf/ldconfig || LC_ALL=C \ #23 43.05 /root/workspace/teams/glibc-2.39/glibc-build/elf/ldconfig \ #23 43.05 /opt/glibc/lib /opt/glibc/lib #23 43.07 make[1]: Leaving directory '/root/workspace/teams/glibc-2.39' #23 DONE 43.4s
但执行ldd --version命令后,仍显示旧版本2.35。请问如何配置才能让ldd识别我新编译安装的Glibc库?
解决方法
ldd本质是调用系统默认动态链接器的脚本,默认关联系统自带的Glibc 2.35,所以直接运行会显示旧版本。以下是几种配置方式:
临时查看新版本(仅当前终端会话)
直接用新Glibc的动态链接器运行ldd:
/opt/glibc-2.39/lib/ld-linux-x86-64.so.2 --library-path /opt/glibc-2.39/lib /usr/bin/ldd --version
执行后即可看到Glibc 2.39的版本信息。
当前用户终端默认使用新Glibc(永久生效)
编辑用户bash配置文件~/.bashrc,添加环境变量:
export LD_LIBRARY_PATH=/opt/glibc-2.39/lib:$LD_LIBRARY_PATH export PATH=/opt/glibc-2.39/bin:$PATH
保存后重新加载配置:
source ~/.bashrc
之后在该用户终端运行ldd --version会显示新版本。注意:这种方式可能导致部分系统工具异常,因为部分系统命令依赖旧版Glibc,需谨慎测试。
全局替换系统默认Glibc(高风险)
如果要让整个系统默认使用新Glibc,可替换系统动态链接器的软链接,但此操作风险极高,可能导致系统无法启动,需先备份原文件:
# 备份原动态链接器 sudo cp /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2.bak # 创建指向新Glibc的软链接 sudo ln -sf /opt/glibc-2.39/lib/ld-linux-x86-64.so.2 /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
若系统出现异常,需进入救援模式恢复备份的文件。
仅让特定程序使用新Glibc
如果不想全局修改,仅需指定程序使用新Glibc,可通过以下命令运行程序:
/opt/glibc-2.39/lib/ld-linux-x86-64.so.2 --library-path /opt/glibc-2.39/lib /path/to/your/program
内容的提问来源于stack exchange,提问作者Piyush Das
相关产品推荐
相关产品推荐

