我在RHEL 7上安裝了qpid,並想知道它是否提供了正確版本的boost。你如何使用rpm命令來檢查它是否使用了正確的庫集。它不一定是rpm命令,我只是想知道是否使用正確版本的boost。檢查rpm包中使用庫的版本
回答
您可以使用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
也許這會有所幫助。
rpm -qa
將列出所有已安裝的程序。
如果您知道您應該使用的增強版本,那麼您可以使用rpm -qa | grep <program_name>
。
rpm -qi <package_name>
可以爲您提供有關軟件包版本的更多特定信息。 -qi標誌爲您提供版本,發行版,安裝日期,大小等。
這通常不是您通過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封裝的軟件來說很少會出現問題,但我經常會用其他類型的封裝分發預構建軟件。
對於給定的包,可以使用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,計數註釋和空白:一個好學生行使)。
- 1. 檢查RPM安裝使用Ruby腳本
- 2. RPM需要一個包的I386版本
- 3. 使用rpm查看RPM腳本--scripts -qp
- 4. RPM包中最新版RPM包的識別過程是什麼?
- 5. Rpm包信息:自動遞增版本
- 6. Wireshark rpm包裝 - 設置版本號
- 7. 檢查庫版本netcdf linux
- 8. 檢查庫版本hdf5 linux
- 9. 並排RPM版本
- 10. 如何將RPM版本4.4。*升級到RPM版本4.8。?
- 11. rpm-maven-plugin截斷rpm版本
- 12. 如何使用Redline RPM Java庫創建RPM包?
- 13. 使用十六進制查看器檢查數據庫版本
- 14. 如何更新RPM版本?
- 15. 是否可以使用qmake來檢查庫的版本?
- 16. 如何使用TSQL檢查數據庫的SQL Server版本?
- 17. 檢查行包含版本號
- 18. 檢查Flash版本的腳本沒有真正檢查版本
- 19. 如何在sbt-native-packager rpm版本中包含libsigar?
- 20. RPM:查找spec中的子包名稱
- 21. 使用WIX檢查.Net版本
- 22. 使用Eclipse檢查GCC版本
- 23. PowerShell:使用Powershell檢查Firefox版本
- 24. 檢查Groovy版本Gradle正在使用
- 25. 使用#if檢查版本號... #endif
- 26. 如何使用Autoconf檢查Linux版本?
- 27. 如何使用C++檢查python版本?
- 28. 檢查Pygame版本
- 29. 檢查Android版本
- 30. 檢查PEAR版本
@Mureinik擊敗了我。他們的回答總結了我想說的話。 –
你應該發佈它作爲答案,以防有人絆倒在這個帖子尋找答案 –
我想但但,錯誤發佈不讓我發佈我的答案 –