Dynamic-Linking

ldd 顯示了一組連結的庫,但使用 rabin2 -l 顯示不同。為什麼呢?

  • March 31, 2021

在嘗試調試某些東西時,我注意到這ldd <executable>會顯示一堆庫,例如libldap_rlibkrb5libroken,等等。另一方面, arabin2 -l <executable>不顯示同一組庫。

我已經從連結或函式呼叫中搜尋了 ldap 字元串的源目錄,但它們沒有顯示出來,這意味著無論如何都不應該連結這些庫。我應該怎麼做才能確定是否正在使用這些庫?

rabin2 -l顯示二進製文件的直接依賴關係,那些在二進製文件本身中列出的依賴關係。ldd顯示二進製完全解析的依賴樹(盡可能);這包括傳遞依賴。因此,如果一個二進製文件需要libaand libb,並且liba需要libd它自己需要liberabin2 -l將只列出libaand libb,而ldd將顯示所有四個庫(如果它們都可用)。

您可以通過列出第一個二進製文件的依賴項,然後是每個單獨的依賴項的依賴項,依此類推,直到沒有辨識出新的依賴項,來ldd手動匹配’s 結果。rabin2 -l

要查明某個庫是否實際被使用,您可以在ltrace您關心的所有場景中使用二進製文件。這將辨識被呼叫的庫函式。請注意,某些庫的使用將取決於配置;例如,Kerberos 庫可能僅在配置 Kerberos 時使用。

另請參見ldd 與 rpm -q –requires

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