Welche Bibliotheken werden benötigt für dieses binary ausführen?
Linux-Basis (Ubuntu 11.10)
Bevor mein computer ist abgestürzt, ich hatte einen binäre auf meinem computer: ./program
gegeben wurde, dass ohne mich die Quelle. Diese Datei ausgeführt Prima. Wenn meine Festplatte nicht, ich begann mit einem frisch installieren und habe versucht zu laufen, diese binäre die auf dem gleichen computer. Jetzt schlägt fehl mit:
bash: ./program: cannot execute binary file
Läuft ldd
auf die Datei gibt Ihnen ein bisschen mehr Informationen:
/usr/bin/ldd: line 161: /lib64/ld-linux-x86-64.so.2: cannot execute binary file
not a dynamic executable
Ich habe einen zweiten computer, auf dem das binary läuft und ldd
gibt die Ausgabe:
./program:
linux-vdso.so.1 => (0x00007fffdad5e000)
libz.so.1 => /lib64/libz.so.1 (0x00000039a1400000)
libstdc++.so.6 => /usr/local/gcc/gcc-4.5.1/lib64/libstdc++.so.6 (0x00007fce82c7a000)
libm.so.6 => /lib64/libm.so.6 (0x00007fce829f6000)
libgcc_s.so.1 => /usr/local/gcc/gcc-4.5.1/lib64/libgcc_s.so.1 (0x00007fce827e1000)
libc.so.6 => /lib64/libc.so.6 (0x00007fce82452000)
/lib64/ld-linux-x86-64.so.2 (0x00007fce82f7f000)
Gibt es eine Möglichkeit, ich kann sagen, was benötigt wird, so kann ich mein Programm wieder zum laufen? Ich weiß, dass etwas installiert, bevor der Absturz geschah mit apt-get
also ich glaube nicht, dass es erfordert etwas einzigartiges, das nicht im repository.
Lokalisierte Frage?
Ich zugeben, dass dies bestimmten Frage möglicherweise insbesondere für mich - aber die Frage steht immer noch im Allgemeinen Sinne. Gegeben eine binäre nur, wie wollen Sie ermitteln, welche Bibliotheken es benötigt, um ausgeführt werden?
nm -u program
um zu sehen, was nicht aufgelöste Symbole gibt es?auf jedem computer gibt es eine Tonne von Einträgen, aber in beiden Fällen eine
diff
zeigt, Sie sind die gleichenInformationsquelleAutor Hooked | 2012-02-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Laufen
file
mit dem Programm als argument auf dem computer, woldd
funktioniert. Es wird Ihnen sagen, wenn die binäre ist gebaut für 32 oder 64 bit. Vermutlich haben Sie zum installieren der 32-bit-Kompatibilitäts-Bibliotheken, bevor es ausgeführt werden kann, unter debian/ubuntu heißt dieseia32-libs
.file
gibtprogram: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.4, not stripped
so sieht es aus wie gebaut für mein 64-bit-Rechner (beide Rechner sind 64 bit).OK. Haben Sie eine Datei namens /lib64/ld-linux-x86-64.so.2 ? Hast du eines mit einer anderen version am Ende? Versuchen Sie, erstellen einen symlink auf /lib64/ld-x.y.so
Kann dies das problem sein dann, während ich zu tun haben
/lib64/ld-linux-x86-64.so.2
ich habe keine Dateild-x.y.so
noch Google wird mir sagen, was diesem gehört./lib64/x86_64-linux-gnu/ld-2.13.so und /lib64/ld-linux-x86-64.so.2 kommt von der
libc6
deb-Paket auf meinem ubuntu-Rechner.Fand dieser Leckerbissen begraben innerhalb einer PDF-Datei: Zum installieren der 32-bit-runtime-Unterstützung, Führen Sie die folgenden Befehle: - $
sudo apt-get update
- $sudo apt-get install ia32-libs
Beachten Sie, dass dies installiert über 200 Pakete, und dauert einige Minuten. Tun dies ermöglichte mir die Ausführung unter 64-bit Linux:ldd
auf, zum Beispiel die NVIDIAnvflash
binären, für den der Quellcode nicht öffentlich ist.InformationsquelleAutor Erik Ekman