Ich habe ein Spiel heruntergeladen (Shank), aber die Bin-Datei läuft nicht. Der Fehler, der angezeigt wird, wenn ich versuche, die ausführbare Datei zu starten, ist:
bash: ./shank-linux-120720110-1-bin: No such file or directory
Ich habe ein Spiel heruntergeladen (Shank), aber die Bin-Datei läuft nicht. Der Fehler, der angezeigt wird, wenn ich versuche, die ausführbare Datei zu starten, ist:
bash: ./shank-linux-120720110-1-bin: No such file or directory
Antworten:
Sie versuchen wahrscheinlich, eine 32-Bit-Binärdatei auf einem 64-Bit-System auszuführen, auf dem keine 32-Bit-Unterstützung installiert ist.
Es gibt drei Fälle, in denen die Meldung "Keine solche Datei oder kein solches Verzeichnis" angezeigt wird:
file shank-linux-120720110-1-bin
zeigt beispielsweise so etwas wie "ELF 32-Bit-LSB-ausführbare Datei ..." an). Wenn Sie jedoch versuchen, sie auszuführen, wird Ihnen mitgeteilt, dass die Datei nicht vorhanden ist.Die Fehlermeldung in diesem letzten Fall ist zugegebenermaßen verwirrend. Ihnen wird gesagt, dass eine Schlüsselkomponente der Laufzeitumgebung, die zum Ausführen des Programms erforderlich ist, fehlt. Leider hat der Kanal, über den der Fehler gemeldet wird, nur Platz für den Fehlercode und nicht für diese zusätzliche Information, dass es wirklich die Laufzeitumgebung ist, die schuld ist. Wenn Sie die technische Version dieser Erklärung benötigen, lesen Sie die Meldung "Nicht gefunden", wenn Sie eine 32-Bit-Binärdatei auf einem 64-Bit-System ausführen .
Der file
Befehl sagt Ihnen genau, was diese Binärdatei ist. Mit wenigen Ausnahmen können Sie nur eine Binärdatei für die Prozessorarchitektur ausführen, für die Ihre Ubuntu-Version vorgesehen ist. Die Hauptausnahme ist, dass Sie 32-Bit-Binärdateien (x86, auch bekannt als IA32) auf 64-Bit-Systemen (amd64, auch bekannt als x86_64) ausführen können.
In Ubuntu bis 11.04 müssen Sie das ia32-libs
Paket installieren , um eine 32-Bit-Binärdatei in einer 64-Bit-Installation auszuführen . Möglicherweise müssen Sie zusätzliche Bibliotheken installieren (in diesem Fall wird eine explizite Fehlermeldung angezeigt).
Seit 11.10 (oneiric) können Sie Multiarch- Unterstützung installieren ia32-libs
, aber Sie können einen differenzierteren Ansatz wählen, der ausreicht, um (plus jede andere erforderliche Bibliothek) zu erhalten.libc6-i386
ldd
überprüfen, ob eine Bibliothek fehlt. ldd kgio_ext.so
könnte libruby.so.2.3 => not found
unter anderem so etwas sagen
bash: ...some...path...: No such file or directory
Folgendes zeigen kann: Nach dem Verschieben der ausführbaren Datei. Bash scheint Pfade zu ausführbaren Dateien in $ PATH zwischenzuspeichern; renn hash -r
um es zu klären. Siehe: unix.stackexchange.com/a/5610/11352
Folgen Sie dieser Antwort nur, wenn die Ausgabe von file file-name
zeigt,
file-name: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped
Um 32 - Bit ausführbare Datei in einem 64 - Bit Multi-Arch Ubuntu - System läuft, müssen Sie hinzufügen , i386
Architektur und auch müssen Sie installieren libc6:i386
, libncurses5:i386
, libstdc++6:i386
diese drei Bibliothekspakete.
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
./file-name
libselinux1:i386
Als ich das Deb für 32-Bit installierte, wurde mir klar, dass ich einige Bibliotheken (zusätzlich zu ia32-libs und libc6) vermisse. Ich habe dieses Problem zuerst gelöst, indem ich den folgenden Befehl gab:
sudo apt-get install -f
Dann habe ich noch einen Fehler bekommen:
Message: SDL_GL_LoadLibrary
Error: Failed loading libGL.so.1
Offensichtlich wurden diese Bibliotheken ordnungsgemäß installiert. Ohne ins Detail zu gehen, musste ich die Bibliotheken von Hand verknüpfen. Mir wurde dann klar, dass sich durch Synaptic auch folgende Pakete leichter installieren lassen:
libgl1-mesa-glx:i386
libgl1-mesa-dri: i386.
Danach war das nächste Problem der schwarze Bildschirm während des Spielens, den ich löste, indem ich die ausführbare Datei in / Shank / bin durch Folgendes ersetzte: http://treefort.icculus.org/smb/smb-linux-mesa-hotfix-test.tar .bz2 .
Ich hoffe, es wird jemandem nützlich sein. Wenn Sie weitere Hilfe oder Details benötigen, können Sie mich gerne kontaktieren.
Hier ist eine Abschrift, die ein bisschen mehr über die Art des Problems und wie es ab Ubuntu 16.04 behoben werden kann. Beachten Sie, dass, obwohl file
Berichte "dynamisch verknüpft" sind, ldd
Berichte "keine dynamische ausführbare Datei" sind.
$ ./myprogram
bash: myprogram: No such file or directory
$ file myprogram
myprogram: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.2.5, not stripped
$ ldd myprogram
not a dynamic executable
Sobald Sie libc6: i386 installiert haben, verbessern sich die Dinge ...
$ sudo apt-get install libc6:i386 # the initial fix
...
$ ldd myprogram
linux-gate.so.1 => (0xf77fd000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7626000)
/lib/ld-linux.so.2 (0x56578000)
$ ./myprogram
myprogram: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
Um den Auftrag abzuschließen, müssen Sie möglicherweise nacheinander weitere Bibliotheken identifizieren und installieren ...
$ sudo apt-get install libstdc++6:i386 ## may require various additional libs
$ ./myprogram
... works correctly ...
Ich weiß nicht, ob es eine systematische Möglichkeit gibt, die richtigen zu installierenden Bibliotheken zu identifizieren. Es gibt ein paar Vermutungen, wie die Fehlermeldungen den Paketnamen zugeordnet werden können (das Ausfüllen von Registerkarten hilft).
ldd
(Falsch) meldet "keine dynamische ausführbare Datei".
Um die Antwort von @Gilles zu erweitern, gibt es mindestens drei Szenarien, die zu diesem Fehler führen:
file
Befehl funktioniert), was zu einer rätselhaften Fehlermeldung führt. Dies kann bedeuten, dass ein Problem mit dem Lader vorliegt.Kategorien von Laderproblemen:
Der Loader einer ausführbaren Datei existiert nicht. Sie können dies mit dem Befehl file überprüfen, um festzustellen, ob der Loader vorhanden ist. Z.B
file lmgrd
lmgrd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-lsb-x86-64.so.3, for GNU/Linux 2.6.18, stripped
Hinweis interpreter /lib64/ld-lsb-x86-64.so.3
; Wenn diese Datei nicht vorhanden ist, müssen Sie sie installieren. Für diesen speziellen Loader am 16.04 stellte sich heraus, dass die Antwort lautete sudo apt-get install lsb
.
Probleme mit dem Ladeprogramm eines Skripts (siehe diese Antwort ).
ldd <file-name>
diese Option, um nach nicht gefundenen Bibliotheken zu suchen. Weitere Informationen finden Sie in dieser Antwort .Der nicht vorhandene Loader kann auf einen 32/64-Bit-Konflikt oder einen anderen Grund zurückzuführen sein. Möglicherweise gibt es andere Arten von Loader-Fehlern, die ich nicht kenne.
file lmutil
habe ich den Interpreter nicht gezeigt, habe es aber ldd
getan, und die Installation hat lsb
das Problem gelöst.