
我的連結器位於
/lib{32,64}/ld-2.20.so
,符號連結位於
/lib32/ld-linux.so.2
和
/lib64/ld-linux-x86-64.so.2
(到適當的ld-2.20.so
s)
當我嘗試執行 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.so
libc.so.6
libc_nonshared.a
AS_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