GLIBC是一个C标准库,很多C/C++程序都会依赖它,在linux系统上安装一些软件(库)时,linux系统需要满足该软件(库)的所有依赖才行,否则,就会出现无法安装或使用的问题,本文以最近在ubuntu系统下使用到的库libnss3-tools作为示例进行说明。
libnss3-tools是一个用于网络安全服务的软件包。提供了一些工具和库文件,用于处理网络安全协议和证书。在ubuntu系统上安装该该库时报错了,错误如下:usr/bin/certutil: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by usr/bin/certutil)
该错误意思是说:usr/bin/certutil需要的glibc的版本为:GLIBC_2.34,但是再我的系统中没有这个版本或者版本不兼容。所以查了下当前ubuntu系统的glibc版本:
:~$ ldd --version
ldd (Ubuntu GLIBC 2.27-3ubuntu1.6) 2.27
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
或者
:~$ getconf GNU_LIBC_VERSION
glibc 2.27
可见,当前系统glibc的版本为2.27,低于所需版本2.34,所以要么升级glibc版本,要么安装适合当前gblic的libnss3-tools。升级glibc可能会导致系统其他部分不工作。在Debian或Ubuntu上,你可以使用apt-get
命令来更新glibc
sudo apt-get update
sudo apt-get upgrade libc6
所以,稳妥起见,我考虑降低libnss3-tools的版本以适应当前glibc,于是在debian官网查找其它版本,过程如下:
一、登录nss包管理地址
Debian Package Tracking System -nss
二、找到低版本,如这里选择2:3.61-1+deb11u3,然后点击该链接
三、此时进入的是nss源码的一个说明界面,该界面显示了nss包的依赖
此处说明下:nss源码包构建时同时构建了以下二进制包:libnss3、libnss3-dev、libnss3-tools
四、点击界面中的链接libnss3-tools,跳转到libnss3-tools的说明界面,该界面显示的为libnss3-tools依赖
从界面中依赖可知,如果是amd架构下,对于glibc的依赖为:libc6?(>= 2.14) [amd64]
同样,我们看下其它版本对应glibc的依赖:
综上所述,这里我选择相对最新的适合当前glibc版本的2:3.61-1+deb11u3。