Dynamic-Linking
命令列出要在其中查找共享庫的目錄?
我已經閱讀
which
了共享庫的等效內容以及執行檔在執行時在哪裡查找共享對象,但是是否有命令列出將在其中搜尋共享庫的所有目錄?類似於自動計算第二個問題中解釋的所有列表的命令。
短:沒有
long:相關的環境變數是系統和配置相關的。對於給定的系統/配置,您可以編寫一個執行此操作的腳本。
*執行檔在執行時在哪裡查找共享對象*提供了一些見解,但並不完整。它提到了 OSX 和 Solaris,但側重於 Linux,指向兩個資源:
- Program Library HOWTO: 3. Shared Libraries(其中提到
LD_LIBRARY_PATH
但不經常提及LD_LIBRARY_PATH_64
,並且還單行提及rpath)。- ld.so, ld-linux.so* - 動態連結器/載入器,它再次提到了一些環境變數和rpath。
您還會發現這些很有用:
- ldconfig - 配置動態連結器執行時綁定,特定於 Linux(無論是 OSX 還是 Solaris):
ldconfig
****/etc/ld.so.conf
創建必要的連結和記憶體到在命令行指定的目錄、文件和受信任 的目錄中找到的最新共享庫,/lib
並且/usr/lib
(在某些 64 位架構上,例如 x86-64、lib**/usr/lib
**和32 位庫的受信任目錄,而 **/lib64
和/usr/lib64
**用於 64 位庫)。
- 共享庫如何在 64 位/32 位混合系統中工作?
- shlib 腳本,ncurses 中的一個實用腳本,列出了用於指定共享庫所在位置的各種環境變數。
特別是“
sudo ldconfig -v
”
-v
, 詳細模式。列印目前版本號、掃描的每個目錄的名稱以及創建的任何連結。覆蓋安靜模式。--verbose
這與所要求的很接近,但提供了很多無關的資訊。(雖然 BSD 使用它,但它在很大程度上是 Linux 特定的——但不同,請參見手冊頁)。如果您對其輸出格式做出一些假設,則可以使用以下方法從中獲取目錄
sudo ldconfig -v 2>/dev/null | grep ':$' |sed -e 's/://'
這給出了(在一個系統上)
/usr/local/lib /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu /lib /usr/lib
回顧一下:沒有command,但您可以製作一個腳本,該腳本依賴於系統。