241 votes

Aucun fichier ou répertoire de ce type ? Mais le fichier existe !

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

286voto

Schof Points 952

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" :

  • Le fichier n'existe pas. Je suppose que vous avez vérifié que le fichier existe bien (peut-être parce que le Shell le complète).
  • Il existe un fichier de ce nom, mais c'est un lien symbolique qui pendouille.
  • Le fichier existe, et vous pouvez même le lire (par exemple, la commande 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 Install ia32-libs . 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 Install libc6-i386 (plus toute autre bibliothèque nécessaire).

71voto

Avinash Raj Points 72686

Systèmes Ubuntu Multiarch 64 bits

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

16voto

jtpereyda Points 1875

Pour développer la réponse de @Gilles, il existe au moins trois scénarios entraînant cette erreur :

  1. Le fichier n'existe pas.
  2. Le fichier existe mais c'est un lien symbolique qui pendouille.
  3. Le fichier existe (par exemple 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 :

  1. 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 .

  2. Problèmes avec le chargeur d'un script (voir cette réponse ).

  3. 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.

6voto

Ben Points 10335

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).

4voto

Francesco Points 2641

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.

SistemesEz.com

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.

Powered by:

X