2013-05-29 9 views
12

Ich habe eine Binärdatei, die eine Reihe von .so-Dateien verwendet.ldd funktioniert nicht auf dynamisch verknüpfte binäre

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 

Aber wenn ich ldd auf diese Datei ausgeführt, es ist nicht der Lage, die .so abholen Dateien die binäre auf abhängt.‘

bash-3.00$ ldd foo 
     not a dynamic executable 
bash-3.00$ 

readelf die Liste der gemeinsam genutzten Bibliotheken durch die binäre verwendet wird zeigen ..

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] 

Warum ist LDD nicht in der Lage, die Bibliotheksabhängigkeiten in diesem Fall zu holen?

+7

Sie befinden sich wahrscheinlich in einer 64-Bit-Umgebung. Die Installation von 32-Bit-Kompatibilitäts-Bibliotheken sollte das Problem beheben. – devnull

+4

Danke. Das war's. In ubuntu kann ich ia32-libs installieren und ldd funktioniert. Aber in RedHat sieht es so aus, als ob es keine schnelle und einfache Möglichkeit gibt, die 32-Bit-Kompatibilitäts-Bibliotheken zu installieren. – Manohar

Antwort

5

Wie einer der Kommentar sagt - Sie versucht mit ldd auf 64-Bit-System ein 32-Bit-ELF-Objekt zu inspizieren. ldd verwendet den standardmäßigen dynamischen Linker, um die Abhängigkeiten zu verfolgen. Wenn Ihre Plattform also nicht über den Linker verfügt, der für das zu überprüfende ELF-Objekt erforderlich ist, schlägt ldd fehl. Readelf und objdump sind in diesen Situationen robuster.

4

Beachten Sie, dass in Fedora 21, LDD zu bekommen 32bit .so-Dateien zu identifizieren, hatte ich folgendes zu installieren:

sudo yum install glibc.i686 libgcc.i686 libstdc++.i686 glibc-devel.i686 

Ich bin nicht sicher, einer von denen, die die „nicht einem dynamischen ausführbaren Fest "Fehler, den ich in LDD sah.

+1

Hier (auf CentOS7) wurde nur 'yum install glibc.i686' benötigt, um dies für die ausführbare Datei" deflate "von vxworks 6.9 zu verwenden. – Jens

Verwandte Themen