如何找出已安装库的版本号?


12

与RedHat / CentOS相关的问题。我对软件包和库以及如何将它们固定到固定版本之间有些困惑。

最近的libxcb版本中存在一个X11转换错误,会影响我的C程序。libxcb-1.5-1没有该错误。

所以我做了:

# yum remove libxcb-devel
# rpm -Uvh --oldpackage libxcb-1.5-1.el6.i686.rpm 

现在错误消失了,我的软件运行正常。

快进几周,错误又回来了。

# yum info libxcb-devel
Loaded plugins: refresh-packagekit, security
Available Packages
Name       : libxcb-devel
Arch       : i686
Version    : 1.9.1
Release    : 2.el6
Size       : 1.0 M
Repo       : sl-security

但是安装的版本或可通过仓库访问的版本吗?我如何知道当前安装了哪个版本的libxcb?

$ ll /usr/lib/libxcb.so*
lrwxrwxrwx 1 root root     15 Aug  6 03:38 /usr/lib/libxcb.so.1 -> libxcb.so.1.1.0*
-rwxr-xr-x 1 root root 130752 Oct 14  2014 /usr/lib/libxcb.so.1.1.0*
$ readelf -d /usr/lib/libxcb.so.1.1.0 | grep SONAME
 0x0000000e (SONAME)                     Library soname: [libxcb.so.1]

所以我对yum显示的版本号,.so上的编号和我想要的编号之间感到困惑。

Answers:


14

如果您想知道安装了什么版本,请运行:

rpm -q libxcb-devel

如果要防止升级到此软件包,可以将软件包添加到yum exclude配置中。将以下内容添加到中的main部分/etc/yum.conf

exclude=libxcb-devel

库版本(例如中的libxcb.so.1.1.0)很少跟踪软件包的版本,而是跟踪API的更改。


1
# yum remove libxcb-devel
# rpm -Uvh --oldpackage libxcb-1.5-1.el6.i686.rpm 

这是两个不同的程序包。-devel版本用于编译,不带-devel的libxcb程序包将用于运行应用程序。

因为您删除了-devel版本,所以没有安装任何东西,所以“ yum info”仅显示最新的可用版本(可以使用--showduplicates选项查看所有版本)。如果您想停止升级,我建议您在libxcb软件包上安装/使用versionlock插件...尽管可以使用excludes手动完成。

也可以直接使用rpm,您可以只使用:yum downgrade blah.rpm


yum降级似乎不可用。这是最近的补充吗?感谢您的版本锁定提示,我从未听说过。
dargaud

我猜想,删除了开发工具以避免静态链接的风险。
dargaud

1
至少从RHEL6开始就可以进行yum降级
doktor5000
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.