Debian/Ubuntu 18.04 上安装 GLIBC 2.28 (2026)

Ubuntu 18.04 上安装 GLIBC 2.28 (2026)

引言

某些现代软件(例如 Visual Studio Code Server 1.88 及更新版本)要求系统 GLIBC 版本不低于 2.28,而 Ubuntu 18.04 默认提供的是 GLIBC 2.27。直接升级系统级 GLIBC 可能导致不稳定甚至系统崩溃,因此需要采用安全的方式为特定程序提供所需的 GLIBC 2.28 环境。本文档提供两种方法:

  1. 推荐方法 :从源码编译 GLIBC 2.28 并安装到自定义目录,然后通过 patchelf 修改目标二进制文件的动态链接器路径。此方法对系统无侵入,仅影响指定程序。
  2. 替代方法 :从 Ubuntu/Debian 仓库下载预编译的 GLIBC 2.28 deb 包并手动安装。注意:此方法风险较高,可能破坏系统稳定性,仅建议在隔离环境或充分了解后果的情况下使用。

环境部署

bash 复制代码
sudo apt install build-essential bison gawk texinfo python3-dev libssl-dev -y
sudo apt install libgdbm-dev libdb-dev libexpat-dev libncurses5-dev -y
sudo apt install libbz2-dev zlib1g-dev gettext libtool automake autoconf -y

方法一:源码编译安装

1. 安装编译依赖

bash 复制代码
sudo apt update
sudo apt install build-essential gettext texinfo bison gawk

2. 下载并解压 GLIBC 2.28 源码

bash 复制代码
mkdir -p ~/src && cd ~/src
wget https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz
tar xzf glibc-2.28.tar.gz

3. 创建独立构建目录并编译

bash 复制代码
mkdir glibc-2.28-build && cd glibc-2.28-build
../glibc-2.28/configure --prefix=/opt/glibc-2.28
make -j$(nproc)

4. 安装到指定目录

bash 复制代码
sudo mkdir -p /opt/glibc-2.28
sudo make install

5. 安装 patchelf 工具

bash 复制代码
sudo apt install patchelf   # Ubuntu 18.04 仓库自带

6. 为需要 GLIBC 2.28 的程序修改动态链接器

以 VSCode Server 的 node 二进制为例:

bash 复制代码
# 进入 VSCode Server 安装目录(具体版本号可能不同)
cd ~/.vscode-server/bin/5c3e652f63e798a5ac2f31ffd0d863669328dc4c
cp node node.bak   # 备份原文件
patchelf --set-interpreter /opt/glibc-2.28/lib/ld-linux-x86-64.so.2 \
         --set-rpath /opt/glibc-2.28/lib:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu \
         node

7. 验证

bash 复制代码
./node --version   # 应正常输出版本号,例如 v18.18.2

注意 :每次 VSCode Server 自动更新后,新下载的 node 二进制需要重新执行上述 patchelf 操作。可编写脚本自动化处理。


方法二:从 Ubuntu/Debian 仓库安装 deb 包

警告

  • 直接替换系统级 GLIBC 可能导致大量依赖程序无法运行,甚至无法登录系统。
  • 此方法仅建议在测试环境或容器中使用,并提前做好备份。
  • 若必须使用,请确保仅安装到自定义目录(如 /opt/glibc-2.28)并配合 patchelf 使用,而非直接覆盖系统库。

1. 下载所需 deb 包

可以从以下任一镜像源获取 GLIBC 2.28 的二进制包:

通常需要下载以下文件(以 Ubuntu 源为例):

bash 复制代码
wget https://old-releases.ubuntu.com/ubuntu/pool/main/g/glibc/libc6_2.28-0ubuntu1_amd64.deb
wget https://old-releases.ubuntu.com/ubuntu/pool/main/g/glibc/libc-bin_2.28-0ubuntu1_amd64.deb
wget https://old-releases.ubuntu.com/ubuntu/pool/main/g/glibc/locales_2.28-0ubuntu1_all.deb
wget https://old-releases.ubuntu.com/ubuntu/pool/main/g/glibc/multiarch-support_2.28-0ubuntu1_amd64.deb
# 其他可选:libc6-dev, libc-dbg 等

2. 安装 deb 包

bash 复制代码
sudo dpkg -i libc6_2.28-0ubuntu1_amd64.deb \
            libc-bin_2.28-0ubuntu1_amd64.deb \
            locales_2.28-0ubuntu1_all.deb \
            multiarch-support_2.28-0ubuntu1_amd64.deb

若出现依赖错误,尝试运行 sudo apt --fix-broken install(必须),软件源更换为阿里云/清华。

注意:上述命令将直接升级系统核心库。若希望仅将库安装到自定义位置,可考虑解包 deb 文件并手动复制:

bash 复制代码
dpkg -x libc6_2.28-0ubuntu1_amd64.deb ./glibc-2.28
sudo cp -r ./glibc-2.28/lib/* /opt/glibc-2.28/lib/

然后使用方法一中的 patchelf 指定解释器路径。


备注

  • 为保持系统稳定,强烈建议使用方法一(源码编译安装到自定义目录)
  • 方法二中的 deb 包仅作为快速获取二进制文件的备用途径,但切勿直接升级系统 GLIBC。
  • 无论采用何种方式,最终都需要通过 patchelf 修改目标程序的动态链接器路径,使其使用新的 GLIBC。

参考资料

相关推荐
Hhy_110713 小时前
《C++深度解构04》类和对象(下)——类型转换、static、友元与编译器优化
c语言·c++·学习·类和对象·visual studio
傲世仙尊13 小时前
设计者的取舍-路径fork的诞生与全局文件队列
linux
蓝速科技13 小时前
会议室门牌签到功能选型与落地指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
逐流人13 小时前
Containerd容器管理实战:从架构原理到nerdctlcrictl工具链
linux·运维·云原生·容器·云计算·containerd
Wang's Blog13 小时前
Java 项目实战: 外卖平台-后台退出功能与首页iframe架构
java·服务器·redis
Wang's Blog13 小时前
Java 项目实战: 外卖平台-软件开发流程与项目整体介绍
java·服务器·redis
Tairitsu_H13 小时前
[Linux] 编辑器vim、编译器和动静态链接
linux·vim·gcc·g++·动态链接·静态链接
lzx_00213 小时前
Linux指令(一) 简单了解部分指令
linux
X7766X13 小时前
暴雨重构国产大模型底层加速体系
服务器
小则又沐风a13 小时前
深入理解TCP协议----滑动窗口,流量控制
linux·网络协议·tcp