簡體   English   中英

ldd不適用於動態鏈接的二進制文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM