64 位元系統上具有 32 位元二進位檔案的 ldd - 運行但不會報告

64 位元系統上具有 32 位元二進位檔案的 ldd - 運行但不會報告

我的連結器位於

/lib{32,64}/ld-2.20.so,符號連結位於

/lib32/ld-linux.so.2

/lib64/ld-linux-x86-64.so.2(到適當的ld-2.20.sos)

當我嘗試執行 32 位元二進位檔案時,一切正常。它們編譯得很好(我使用的是稍微修改過的 gccspecs檔案)並且看起來連結得很好,並且運行得很好。

當我嘗試時ldd /path/to/example/32bit/binary,有人告訴我not a dynamic executable。我的理解是,這是由於無法找到連結器來開啟可執行檔。

readelf -l example_binary | grep interpreter給出[Requesting program interpreter: /lib32/ld-linux.so.2],如預期的那樣。

任何想法為什麼會發生這種情況/我該如何解決它?

Ps - “使用 sudo apt get 安裝 32 位元相容性庫...”沒有幫助,因為沒有 apt/pacman/etcetera。如果我需要重新安裝特定的(32 位元)庫,那麼了解這一點將會很有幫助!

Pps - 由適當的(真實)文件組gcc安裝的腳本文件,末尾為 lib32/usr/lib{32,64}/libc.solibc.so.6libc_nonshared.aAS_NEEDED ( /lib32/ld-linux.so.2 ) )

答案1

事實證明這很容易。

/usr/bin/ldd只是一個腳本檔。

開啟腳本檔案會在頂部附近顯示一行,最初顯示為(在我的系統上):

RTLDLIST="/lib/ld-linux.so.2 /lib64/ld-linux-x86-64.so.2 /libx32/ld-linux-x32.so.2"

更改此行可 RTLDLIST="/lib32/ld-linux.so.2 /lib64/..."立即解決問題。

Ps(在此處添加,以防其他人努力安裝 gobject-introspection)如果嘗試安裝 gobject-introspection,該解決方案也很有用,因為這會ldd調用解析庫。

我收到的錯誤訊息是:ERROR: can't resolve libraries to shared libraries: gobject-2.0, glib-2.0

相關內容