[英]ldd doesn't work on dynamically linked binary
我有一個使用一堆.so文件的二進制文件。
bash-3.00$ file foo
foo: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.21, dynamically linked (uses shared libs), not stripped
但是如果我在這個文件上運行ldd,它就無法獲取二進制文件所依賴的.so文件。
bash-3.00$ ldd foo
not a dynamic executable
bash-3.00$
readelf確實顯示了二進制文件使用的共享庫列表。
bash-3.00$ readelf -d foo
Dynamic segment at offset 0x17c810 contains 70 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libdl.so.2]
在這種情況下,為什么ldd無法獲取庫依賴項?
就像其中一條評論所說 - 你嘗試在64位系統上使用ldd來檢查32位ELF對象。 ldd使用標准動態鏈接器來跟蹤依賴關系,因此如果您的平台沒有要檢查的ELF對象所需的鏈接器,則ldd將失敗。 Readelf和objdump在這些情況下更加強大。
請注意,在Fedora 21中,要使ldd識別32位.so文件,我必須安裝以下內容:
sudo yum install glibc.i686 libgcc.i686 libstdc++.i686 glibc-devel.i686
我不確定哪一個修復了我在ldd中看到的“不是動態可執行文件”錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.