ldd mit 32-Bit-Binärdateien auf einem 64-Bit-System - läuft, meldet aber nicht

ldd mit 32-Bit-Binärdateien auf einem 64-Bit-System - läuft, meldet aber nicht

Meine Linker sind in

/lib{32,64}/ld-2.20.so, mit symbolischen Links bei

/lib32/ld-linux.so.2Und

/lib64/ld-linux-x86-64.so.2(zum entsprechenden ld-2.20.sos)

Wenn ich versuche, eine 32-Bit-Binärdatei auszuführen, ist alles in Ordnung. Die Kompilierung funktioniert einwandfrei (ich verwende eine leicht modifizierte GCC- specsDatei), die Verknüpfung funktioniert scheinbar einwandfrei und die Dateien laufen einwandfrei.

Wenn ich es versuche ldd /path/to/example/32bit/binary, wird mir Folgendes angezeigt not a dynamic executable. Meines Wissens liegt das daran, dass kein Linker zum Öffnen der ausführbaren Datei gefunden werden kann.

readelf -l example_binary | grep interpretergibt [Requesting program interpreter: /lib32/ld-linux.so.2], wie erwartet.

Irgendwelche Ideen, warum das passiert / wie ich es beheben kann?

Ps - „Installieren Sie 32-Bit-Kompatibilitätsbibliotheken mit sudo apt get ...“ ist nicht hilfreich, da ich apt/pacman/etc. nicht habe. Wenn ich eine bestimmte (32-Bit-)Bibliothek neu installieren muss, wäre es hilfreich, das zu wissen!

gccPps - Die von at installierten Skriptdateien /usr/lib{32,64}/libc.sogruppieren die entsprechenden (echten) libc.so.6und libc_nonshared.aDateien, mit dem AS_NEEDED ( /lib32/ld-linux.so.2 ) )am Ende für lib32

Antwort1

Es stellt sich heraus, dass das ziemlich einfach ist.

/usr/bin/lddist nur eine Skriptdatei.

Beim Öffnen der Skriptdatei wird oben eine Zeile angezeigt, die zunächst (auf meinem System) lautet:

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

Durch Ändern dieser Zeile wurde RTLDLIST="/lib32/ld-linux.so.2 /lib64/..."das Problem sofort behoben.

P.S. (füge es hier hinzu, falls es jemand anderem hilft, der Probleme mit der Installation von gobject-introspection hat). Die Lösung ist auch nützlich, wenn Sie versuchen, gobject-introspection zu installieren, da dies Aufrufe lddzum Auflösen von Bibliotheken durchführt.

Die Fehlermeldung die ich dort bekam war:ERROR: can't resolve libraries to shared libraries: gobject-2.0, glib-2.0

verwandte Informationen