Pas un tel fichier ou répertoire? Mais le fichier existe!

146

J'ai téléchargé un jeu (Shank) mais le fichier bin ne fonctionne 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
    
posée Francesco 07.05.2012 - 21:06
la source

5 réponses

199

Vous essayez probablement d'exécuter un fichier binaire 32 bits sur un système 64 bits sur lequel la prise en charge 32 bits n'est pas installée.

Il existe 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 (peut-être parce que le shell le termine).
  • Il y a un fichier portant ce nom, mais c'est un lien symbolique en suspens.
  • Le fichier existe, et vous pouvez même le lire (par exemple, la commande file shank-linux-120720110-1-bin affiche quelque chose comme "exécutable LSF 32 bits LSB ..."), et quand vous essayez de l'exécuter, fichier n'existe pas.

Le message d'erreur dans ce dernier cas est confus. Ce qu’il vous dit, c’est qu’un élément clé de l’environnement d’exécution nécessaire à l’exécution du programme est manquant. Malheureusement, le canal par lequel l'erreur est signalée ne peut contenir que le code d'erreur et pas pour cette information supplémentaire, à savoir que l'environnement d'exécution est à blâmer. Si vous voulez la version technique de cette explication, lisez Obtenir un message" introuvable "lors de l'exécution d'un fichier binaire 32 bits sur un système 64 bits .

La commande file vous indiquera ce qu'est ce binaire. À quelques exceptions près, vous ne pouvez exécuter un binaire que pour l’architecture de processeur utilisée par votre version d’Ubuntu. La principale exception est que vous pouvez exécuter des fichiers binaires 32 bits (x86, a.k.a. IA.32) sur des systèmes 64 bits (amd64, a.k.a. x86_64).

Dans Ubuntu à 11.04, pour exécuter un fichier binaire 32 bits sur une installation 64 bits, vous devez installer ia32-libs package . 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), multiarch support, vous pouvez toujours installer ia32-libs , mais vous pouvez choisir une approche plus fine, il suffit de libc6-i386 (plus toute autre bibliothèque nécessaire).

    
réponse donnée Gilles 07.05.2012 - 23:47
la source
38

Systèmes Ubuntu Multiarch 64 bits

Suivez cette réponse uniquement si le résultat de file file-name s'affiche,

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 64 bits multi-arch, vous devez ajouter l'architecture i386 et installer libc6:i386 , libncurses5:i386 , libstdc++6:i386 ces trois packages 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
    
réponse donnée Avinash Raj 24.04.2014 - 15:14
la source
4

En installant deb pour 32 bits, j'ai réalisé que certaines bibliothèques manquaient (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 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 l'installation de Synaptic sur les paquets suivants pourrait également être une solution plus simple:

libgl1-mesa-glx:i386
libgl1-mesa-dri: i386.

Après cela, le problème suivant était l'écran noir lors de la lecture, que j'ai résolu en remplaçant l'exécutable dans / Shank / bin par ceci: lien .

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.

    
réponse donnée Francesco 09.05.2012 - 21:12
la source
3

Voici une transcription montrant un peu plus la nature du problème et la façon de le réparer depuis Ubuntu 16.04. Notez que même si file rapporte "lié 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 installez 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 bibliothèques à installer. Il y a un peu de conjecture pour mapper les messages d'erreur aux noms de paquetages (la complétion par tabulation aide).

    
réponse donnée nobar 08.06.2016 - 22:57
la source
1

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

  1. Le fichier n'existe pas.
  2. Le fichier existe mais est un lien symbolique en suspens.
  3. Le fichier existe (par exemple, la commande file fonctionne), ce qui crée un message d'erreur déroutant. Cela peut signifier un problème avec le chargeur.

Catégories de problèmes de chargeur:

  1. Le chargeur d'un exécutable n'existe pas. Vous pouvez vérifier cela en utilisant la commande de fichier 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
    

    Remarquez interpreter /lib64/ld-lsb-x86-64.so.3 ; Si ce fichier n'existe pas, vous devez l'installer. Pour ce chargeur particulier du 16.04, la réponse a été sudo apt-get install lsb .

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

  3. Bibliothèques partagées manquantes - utilisez ldd <file-name> pour rechercher les bibliothèques "introuvable". Voir cette réponse pour plus d'informations.

Le chargeur non existant peut être dû à une incompatibilité de 32/64 bits ou à une autre raison. Il y a peut-être d'autres erreurs de chargement que je ne connais pas.

    
réponse donnée jtpereyda 11.05.2018 - 20:54
la source

Lire d'autres questions sur les étiquettes