설치된 라이브러리의 버전 번호를 찾는 방법은 무엇입니까?

설치된 라이브러리의 버전 번호를 찾는 방법은 무엇입니까?

RedHat/CentOS와 관련된 문제입니다. 패키지와 라이브러리, 그리고 이를 고정 버전에 고정하는 방법에 대해 약간 혼란스럽습니다.

최근 libxcb 버전에는 내 C 프로그램에 영향을 미치는 X11 롤오버 버그가 있습니다. 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에 있는 번호, 그리고 제가 원하는 번호가 헷갈리네요...

답변1

어떤 버전인지 알고 싶으시다면설치됨, 빨리 달려:

rpm -q libxcb-devel

이 패키지가 업그레이드되는 것을 방지하려면 yum exclude구성에 패키지를 추가할 수 있습니다. main다음 섹션 에 다음을 추가합니다 /etc/yum.conf.

exclude=libxcb-devel

라이브러리 버전(예: libxcb.so.1.1.0)은 패키지 버전을 거의 추적하지 않으며 API 변경 사항을 추적하도록 설계되었습니다.

답변2

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

이들은 두 가지 다른 패키지입니다. -devel 버전은 컴파일에 사용되며, -devel이 없는 libxcb 패키지는 실행할 애플리케이션의 개체입니다.

-devel 버전을 제거했기 때문에 아무것도 설치되지 않았으므로 "yum info"는 사용 가능한 최신 버전만 표시합니다(모든 버전을 보려면 --showduplicates 옵션을 사용할 수 있음). 업그레이드를 중지하려면 libxcb 패키지에 버전 잠금 플러그인을 설치/사용하는 것이 좋습니다. 제외 항목을 사용하여 수동으로 수행할 수도 있습니다.

rpm을 직접 사용할 수도 있습니다. 다음을 사용하세요. yum downgrade blah.rpm

관련 정보