J'ai téléchargé un jeu (Shank) mais le fichier bin ne s'exécute pas. L'erreur affichée lorsque j'essaie de lancer l'exécutable est la suivante:
bash: ./shank-linux-120720110-1-bin: No such file or directory
J'ai téléchargé un jeu (Shank) mais le fichier bin ne s'exécute pas. L'erreur affichée lorsque j'essaie de lancer l'exécutable est la suivante:
bash: ./shank-linux-120720110-1-bin: No such file or directory
Réponses:
Vous essayez probablement d'exécuter un binaire 32 bits sur un système 64 bits sur lequel le support 32 bits n'est pas installé.
Vous pouvez obtenir le message «Aucun fichier ou répertoire de ce type» dans trois cas:
file shank-linux-120720110-1-bin
affiche quelque chose comme «Exécutable ELB 32 bits ELF…»). Pourtant, lorsque vous essayez de l'exécuter, on vous dit que le fichier n'existe pas.Le message d'erreur dans ce dernier cas est certes déroutant. Cela vous dit qu'il manque un composant clé de l'environnement d'exécution nécessaire à l'exécution du programme. Malheureusement, le canal par lequel l'erreur est signalée n'a de la place que pour le code d'erreur et non pour ces informations supplémentaires, à savoir que c'est vraiment l'environnement d'exécution qui est à blâmer. Si vous souhaitez connaître la version technique de cette explication, lisez le message Obtention du message «Introuvable» lors de l’exécution d’un fichier binaire 32 bits sur un système 64 bits .
La file
commande vous dira ce qu'est ce binaire. À quelques exceptions près, vous ne pouvez exécuter qu'un binaire pour l'architecture de processeur à laquelle votre version d'Ubuntu est destinée. La principale exception est que vous pouvez exécuter des fichiers binaires 32 bits (x86, IA32) sur des systèmes 64 bits (amd64, x86_64).
Dans Ubuntu jusqu’à la version 11.04, pour exécuter un fichier binaire 32 bits sur une installation 64 bits, vous devez installer le ia32-libs
paquet . Vous devrez peut-être installer des bibliothèques supplémentaires (vous obtiendrez un message d'erreur explicite si vous le faites).
Depuis 11.10 (oneiric) introduit le support multiarch , vous pouvez toujours installer ia32-libs
, mais vous pouvez choisir une approche plus fine, c'est suffisant pour obtenir (plus toute autre bibliothèque nécessaire).libc6-i386
ldd
pour vérifier s'il vous manque une bibliothèque. ldd kgio_ext.so
pourrait dire quelque chose comme libruby.so.2.3 => not found
entre autres
bash: ...some...path...: No such file or directory
peut apparaître: après avoir déplacé le fichier exécutable. Bash semble mettre en cache les chemins des exécutables trouvés dans $ PATH; courir hash -r
pour le nettoyer. Voir: unix.stackexchange.com/a/5610/11352
Suivez cette réponse uniquement si la sortie de file file-name
shows,
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
Pour exécuter le fichier exécutable 32 bits dans un système Ubuntu multiarchitecture 64 bits, vous devez ajouter l' i386
architecture et aussi vous devez installer libc6:i386
, libncurses5:i386
, libstdc++6:i386
ces trois paquets de bibliothèque.
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
./file-name
libselinux1:i386
En installant le deb pour 32 bits, j'ai réalisé qu'il me manquait des bibliothèques (en plus de ia32-libs et de libc6). J'ai d'abord résolu ce problème en donnant cette commande:
sudo apt-get install -f
Puis j'ai eu une autre erreur:
Message: SDL_GL_LoadLibrary
Error: Failed loading libGL.so.1
Évidemment, ces bibliothèques ont été correctement installées. Sans entrer dans les détails, je devais relier les bibliothèques à la main. J'ai alors réalisé que Synaptic pourrait également installer une solution plus simple:
libgl1-mesa-glx:i386
libgl1-mesa-dri: i386.
Après cela, le problème suivant était l'écran noir pendant la lecture, que j'ai résolu en remplaçant l'exécutable dans / Shank / bin par ceci: http://treefort.icculus.org/smb/smb-linux-mesa-hotfix-test.tar .bz2 .
J'espère que cela sera utile à quelqu'un. Si vous avez besoin de plus d'aide ou de plus de détails, n'hésitez pas à me contacter.
Voici une transcription montrant un peu plus sur la nature du problème et comment le résoudre à partir de Ubuntu 16.04. Notez que même si les file
rapports "liés dynamiquement", les ldd
rapports "ne sont pas un exécutable dynamique".
$ ./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
Une fois que vous avez installé libc6: i386, les choses commencent à s’améliorer ...
$ 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
Pour terminer le travail, vous devrez peut-être identifier et installer des bibliothèques supplémentaires, une à la fois ...
$ sudo apt-get install libstdc++6:i386 ## may require various additional libs
$ ./myprogram
... works correctly ...
Je ne sais pas s'il existe un moyen systématique d'identifier les bonnes bibliothèques à installer. Il y a un peu de approximation qui mappe les messages d'erreur aux noms de paquet (la complétion par un onglet aide).
ldd
(incorrectement) indique "pas un exécutable dynamique".
Pour développer la réponse @Gilles, il existe au moins trois scénarios entraînant cette erreur:
file
commande fonctionne), créant ainsi un message d'erreur déroutant. Cela peut signifier qu'il y a un problème avec le chargeur.Catégories de problèmes de chargeur:
Le chargeur d'un exécutable n'existe pas. Vous pouvez vérifier cela en utilisant la commande file et voir si le chargeur existe. Par exemple
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
Avis interpreter /lib64/ld-lsb-x86-64.so.3
; si ce fichier n'existe pas, vous devez l'installer. Pour ce chargeur en particulier sur 16.04, la réponse s'est avérée être sudo apt-get install lsb
.
Problèmes avec le chargeur d'un script (voir cette réponse ).
ldd <file-name>
"non trouvées". Voir cette réponse pour plus d'informations.Le chargeur inexistant pourrait être dû à une non-concordance de 32/64 bits ou à une autre raison. Il y a peut-être d'autres types d'erreurs de chargement que je ne connais pas.
file lmutil
n'ai pas montré l'interprète, mais je l' ai ldd
fait, et l'installation a lsb
résolu le problème.