Dynamic-Linking
ldd 顯示了一組連結的庫,但使用 rabin2 -l 顯示不同。為什麼呢?
在嘗試調試某些東西時,我注意到這
ldd <executable>
會顯示一堆庫,例如libldap_r
,libkrb5
和libroken
,等等。另一方面, arabin2 -l <executable>
不顯示同一組庫。我已經從連結或函式呼叫中搜尋了 ldap 字元串的源目錄,但它們沒有顯示出來,這意味著無論如何都不應該連結這些庫。我應該怎麼做才能確定是否正在使用這些庫?
rabin2 -l
顯示二進製文件的直接依賴關係,即那些在二進製文件本身中列出的依賴關係。ldd
顯示二進製完全解析的依賴樹(盡可能);這包括傳遞依賴。因此,如果一個二進製文件需要liba
andlibb
,並且liba
需要libd
它自己需要libe
,rabin2 -l
將只列出liba
andlibb
,而ldd
將顯示所有四個庫(如果它們都可用)。您可以通過列出第一個二進製文件的依賴項,然後是每個單獨的依賴項的依賴項,依此類推,直到沒有辨識出新的依賴項,來
ldd
手動匹配’s 結果。rabin2 -l
要查明某個庫是否實際被使用,您可以在
ltrace
您關心的所有場景中使用二進製文件。這將辨識被呼叫的庫函式。請注意,某些庫的使用將取決於配置;例如,Kerberos 庫可能僅在配置 Kerberos 時使用。