Package-Management

有沒有辦法確定應該載入哪些包或庫來支持執行檔?

  • January 19, 2016

我想在電腦上安裝一個執行檔,但我無法重新編譯它不是作為包建構的,我想下載執行它們所需的庫。

ldd以下是在其上執行的部分輸出

libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)
libcairo.so.2 => /usr/lib/i386-linux-gnu/libcairo.so.2 (0xb6f64000)
libatk-1.0.so.0 => /usr/lib/i386-linux-gnu/libatk-1.0.so.0 (0xb6f43000)
libsqlite3.so.0 => /usr/lib/i386-linux-gnu/libsqlite3.so.0 (0xb6e9e000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6cf4000)
/lib/ld-linux.so.2 (0xb786e000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb6cd3000)
libgio-2.0.so.0 => /usr/lib/i386-linux-gnu/libgio-2.0.so.0 (0xb6b7c000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6b4f000)

是否有工具可以使用此資訊來選擇應下載哪些包或更好地僅提取列出的庫及其依賴項,以最大限度地減少磁碟使用量?系統在無頭虛擬機上執行,程序將通過 VNC 顯示。

雖然我懷疑一個完整的圖形桌面將提供大部分所需的庫,但我只想下載所需的庫、它們的依賴項以及足夠的 X Windows 包來支持它。

你還沒有說你正在使用哪個作業系統,所以我將假設 Linux 並將使用 Debian 作為範例。據我所知,對您的問題的快速回答是否定的。不過,這可能是一個有用的解決方法:

ldd your_prog | awk '{print $1}' | sed 's/\..*//' | 
 while read n; do echo "----- $n ----"; apt-cache search ^$n; done

這將解析ldd輸出,然後執行apt-cache(將其替換為您的作業系統的等效項)以在儲存庫中搜尋名稱和描述包含由ldd.

這不會找到所有這些,並且會為某些(如)提供太多結果,libc但它可能會有所幫助。


@FaheemMitha 指出這apt-file可能是更好的方法。例如:

ldd /bin/bash | awk '/=>/{print $(NF-1)}'  | 
while read n; do apt-file search $n; done |
 awk '{print $1}' | sed 's/://' | sort | uniq

這將返回提供連結庫的包名稱列表。

引用自:https://unix.stackexchange.com/questions/101824