J'ai téléchargé un jeu (Shank) mais le fichier bin ne fonctionne pas. L'erreur qui s'affiche 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 fonctionne pas. L'erreur qui s'affiche lorsque j'essaie de lancer l'exécutable est la suivante :
bash: ./shank-linux-120720110-1-bin: No such file or directory
Vous essayez probablement d'exécuter un binaire 32 bits sur un système 64 bits qui ne dispose pas du support 32 bits.
Il y a trois cas où vous pouvez obtenir le message "No such file or directory" :
file shank-linux-120720110-1-bin
affiche quelque chose comme "ELF 32-bit LSB executable "), et 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. Ce qu'il vous dit, c'est 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 place que pour le code d'erreur et non pour cette information supplémentaire selon laquelle c'est l'environnement d'exécution qui est en cause. Si vous souhaitez obtenir la version technique de cette explication, lisez ce qui suit Obtention du message "Not found" lors de l'exécution d'un binaire 32 bits sur un système 64 bits .
Le site file
vous dira ce qu'est ce binaire. À quelques exceptions près, vous ne pouvez exécuter un binaire que pour l'architecture du processeur pour lequel votre version d'Ubuntu est destinée. La principale exception est que vous pouvez exécuter des binaires 32 bits (x86, alias IA32) sur des systèmes 64 bits (amd64, alias x86_64).
Dans Ubuntu jusqu'à 11.04, pour exécuter un 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 l'introduction de 11.10 (oneiric) multiarch vous pouvez toujours installer ia32-libs
mais vous pouvez opter pour une approche plus fine, il suffit d'obtenir libc6-i386
(plus toute autre bibliothèque nécessaire).
Ne suivez cette réponse que si la sortie de file file-name
montre,
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 un fichier exécutable 32 bits dans un système Ubuntu multi-archs 64 bits, il faut ajouter i386
et vous devez également installer libc6:i386
, libncurses5:i386
, libstdc++6:i386
ces trois paquets de bibliothèques.
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
./file-name
Pour développer la réponse de @Gilles, il existe au moins trois scénarios entraînant cette erreur :
file
fonctionne), ce qui donne lieu à 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 chargeurs :
Le chargeur d'un exécutable n'existe pas. Vous pouvez le vérifier 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 particulier sous 16.04, la réponse s'est avérée être la suivante sudo apt-get install lsb
.
Problèmes avec le chargeur d'un script (voir cette réponse ).
Bibliothèques partagées manquantes -- utiliser ldd <file-name>
pour vérifier s'il y a des bibliothèques "non trouvées". Voir cette réponse pour plus d'informations.
L'inexistence du chargeur peut être due à un décalage de 32/64 bits ou à une autre raison. Il peut y avoir d'autres types d'erreurs de chargeur que je ne connais pas.
Voici une transcription montrant un peu plus la nature du problème, et comment le résoudre à partir d'Ubuntu 16.04. Remarquez que même si file
rapports "liés dynamiquement", ldd
signale "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 par une...
$ 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 devinette pour faire correspondre les messages d'erreur aux noms des paquets (la complétion de tabulation aide).
En installant le deb pour 32 bit, j'ai réalisé qu'il me manquait certaines bibliothèques (en plus de ia32-libs et 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
De toute évidence, ces bibliothèques étaient correctement installées. Sans entrer dans les détails, j'ai dû lier les bibliothèques à la main. J'ai alors réalisé qu'il y avait une solution plus simple en installant les paquets suivants avec Synaptic :
libgl1-mesa-glx:i386
libgl1-mesa-dri: i386.
Après cela, le problème suivant était l'écran noir pendant le jeu, que j'ai résolu en remplaçant l'exécutable dans /Shank/bin par ceci : http://treefort.icculus.org/smb/smb-linux-tabla-hotfix-test.tar.bz2 .
J'espère qu'il sera utile à quelqu'un. Si vous avez besoin d'aide ou de plus de détails, n'hésitez pas à me contacter.
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.