2016-06-10 48 views
1

我在RHEL 7上安裝了qpid,並想知道它是否提供了正確版本的boost。你如何使用rpm命令來檢查它是否使用了正確的庫集。它不一定是rpm命令,我只是想知道是否使用正確版本的boost。檢查rpm包中使用庫的版本

回答

2

您可以使用rpm -qa來檢查安裝的RPM並檢查結果。例如,從我的機器(Fedora 23,但相同的委託人應該爲RHEL工作):

[email protected] ~$ rpm -qa | grep boost 
ibus-typing-booster-1.4.5-1.fc23.noarch 
boost-thread-1.58.0-11.fc23.x86_64 
boost-date-time-1.58.0-11.fc23.x86_64 
boost-iostreams-1.58.0-11.fc23.x86_64 
boost-system-1.58.0-11.fc23.x86_64 
1

也許這會有所幫助。

rpm -qa將列出所有已安裝的程序。

如果您知道您應該使用的增強版本,那麼您可以使用rpm -qa | grep <program_name>

rpm -qi <package_name>可以爲您提供有關軟件包版本的更多特定信息。 -qi標誌爲您提供版本,發行版,安裝日期,大小等。

+0

@Mureinik擊敗了我。他們的回答總結了我想說的話。 –

+0

你應該發佈它作爲答案,以防有人絆倒在這個帖子尋找答案 –

+0

我想但但,錯誤發佈不讓我發佈我的答案 –

0

這通常不是您通過RPM安裝的軟件需要處理的問題,只要您避免覆蓋rpm/yum/dnf'依賴性檢查。 RPM會將庫依賴關係指定到庫SONAME,並且程序包安裝/升級/刪除將驗證這些庫依賴關係是否滿足並保持滿意。但是,如果組合中某處出現了錯誤的軟件包,或者如果您安裝了任何未打包的軟件,或者如果您使用--force來覆蓋依賴關係檢查,則可能會出現rpm打包軟件的庫問題,更別說其他軟件了。可能有多個庫使用相同的SONAME安裝,並且動態鏈接程序可以選擇與您想要的不同的一個。或者你可能有不滿意的庫依賴。

因此,您可能需要確定哪些庫將動態鏈接到給定的可執行文件,而與包裝無關。您可以通過ldd命令執行此操作。例如,在我的CentOS 6的系統:

$ ldd /bin/rpm 
    linux-vdso.so.1 => (0x00007ffdabd77000) 
    librpmbuild.so.1 => /usr/lib64/librpmbuild.so.1 (0x0000003708600000) 
    librpm.so.1 => /usr/lib64/librpm.so.1 (0x0000003709200000) 
    libmagic.so.1 => /usr/lib64/libmagic.so.1 (0x0000003707a00000) 
    librpmio.so.1 => /usr/lib64/librpmio.so.1 (0x0000003709600000) 
    libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003707e00000) 

[...]

libnspr4.so => /lib64/libnspr4.so (0x0000003716200000) 

這也是用於檢測文庫的依賴關係不滿足在所有有用的;再次,這對於RPM封裝的軟件來說很少會出現問題,但我經常會用其他類型的封裝分發預構建軟件。

0

對於給定的包,可以使用rpm -qR來顯示其依賴關係,然後爲每個依賴關係rpm -q --whatprovides顯示實際的包名稱。我在構建日誌中執行此操作,以跟蹤我構建的內容,使用腳本將rpm的列表格式化爲可讀性。

例如,給定一個安裝「ncurses6」,和腳本通過這樣開始:

rpm -qR ncurses6 

我得到這樣的輸出:

/bin/sh 
/usr/bin/pkg-config 
libc.so.6()(64bit) 
libc.so.6(GLIBC_2.14)(64bit) 
libc.so.6(GLIBC_2.2.5)(64bit) 
libc.so.6(GLIBC_2.3)(64bit) 
libc.so.6(GLIBC_2.3.4)(64bit) 
libc.so.6(GLIBC_2.4)(64bit) 
libformw6.so.6()(64bit) 
libformw6.so.6(NCURSESW6_5.1.20000708)(64bit) 
libgcc_s.so.1()(64bit) 
libgcc_s.so.1(GCC_3.0)(64bit) 
libm.so.6()(64bit) 
libmenuw6.so.6()(64bit) 
libmenuw6.so.6(NCURSESW6_5.1.20000708)(64bit) 
libncurses++w6.so.6()(64bit) 
libncursesw6.so.6()(64bit) 
libncursesw6.so.6(NCURSESW6_5.1.20000708)(64bit) 
libncursesw6.so.6(NCURSESW6_5.3.20021019)(64bit) 
libncursesw6.so.6(NCURSESW6_5.4.20040208)(64bit) 
libncursesw6.so.6(NCURSESW6_5.5.20051010)(64bit) 
libncursesw6.so.6(NCURSESW6_5.6.20061217)(64bit) 
libncursesw6.so.6(NCURSESW6_5.7.20081102)(64bit) 

和我的腳本會產生這樣的報告:

** package/ncurses.spec 
** ncurses6 
package bash-4.3.42-3.fc23.x86_64 
     /bin/sh 
package glibc-2.22-16.fc23.x86_64 
     libc.so.6()(64bit) 
     libc.so.6(GLIBC_2.14)(64bit) 
     libc.so.6(GLIBC_2.2.5)(64bit) 
     libc.so.6(GLIBC_2.3)(64bit) 
     libc.so.6(GLIBC_2.3.4)(64bit) 
     libc.so.6(GLIBC_2.4)(64bit) 
     libm.so.6()(64bit) 
     libutil.so.1()(64bit) 
     rtld(GNU_HASH) 
package libgcc-5.3.1-6.fc23.x86_64 
     libgcc_s.so.1()(64bit) 
     libgcc_s.so.1(GCC_3.0)(64bit) 
package libstdc++-5.3.1-6.fc23.x86_64 
     libstdc++.so.6()(64bit) 
     libstdc++.so.6(CXXABI_1.3)(64bit) 
     libstdc++.so.6(GLIBCXX_3.4)(64bit) 
package ncurses6-6.0-20160528.x86_64 
     libformw6.so.6()(64bit) 
     libformw6.so.6(NCURSESW6_5.1.20000708)(64bit) 
     libmenuw6.so.6()(64bit) 
     libmenuw6.so.6(NCURSESW6_5.1.20000708)(64bit) 
     libncurses++w6.so.6()(64bit) 
     libncursesw6.so.6()(64bit) 
     libncursesw6.so.6(NCURSESW6_5.1.20000708)(64bit) 
     libncursesw6.so.6(NCURSESW6_5.3.20021019)(64bit) 
     libncursesw6.so.6(NCURSESW6_5.4.20040208)(64bit) 
     libncursesw6.so.6(NCURSESW6_5.5.20051010)(64bit) 
     libncursesw6.so.6(NCURSESW6_5.6.20061217)(64bit) 
     libncursesw6.so.6(NCURSESW6_5.7.20081102)(64bit) 
     libncursesw6.so.6(NCURSESW6_5.8.20110226)(64bit) 

(該腳本是200行Perl,計數註釋和空白:一個好學生行使)。