web-dev-qa-db-fra.com

AC3D - Aucun fichier ou répertoire de ce type

Je viens de télécharger AC3D et d'extraire le Zip dans un dossier de mon dossier personnel. J'ai ouvert un terminal, mis un CD dans le dossier et tapé ./ac3d. Mais je reçois le message d'erreur suivant à chaque fois:

bash: ./ac3d: No such file or directory

Mais le dossier est clairement là! Je l'ai déjà rendu exécutable, ce qui ne pouvait pas être le cas non plus. Toute aide serait appréciée!

Merci d'avance!

Edit 1: @TheSchwa je l'ai fait. Et cela apparaît donc oui, il est reconnu.

@Nephente Voilà. Sortie de ls -l ac3d est:

-rwxrwxrwx 1 ruben ruben 3758400 mei  1 23:34 ac3d

Sortie de head -1 ac3d est (abrégé)

ELF@�   4�T94(44�4�44�4���o27o27@7����|_h�7h0h088HH�H�  P�td\�4\(\(PPQ�td/lib/ld-linux.so.2GNU �[...]

Éditer 2:

Sortie de dpkg --print-architecture: AMD64

Sortie de dpkg --print-foreign-architectures: i386

3
TheBoneJarmer

Le problème est que le binaire est un exécutable 32 bits et que vous exécutez un Ubuntu 64 bits. Ce n'est pas un problème, car Ubuntu offre la prise en charge de plusieurs architectures.

En cas de doute sur la nature d'un exécutable ou de tout fichier en général, la commande

file <filename>

offre des informations précieuses. Si la commande n'est pas disponible, elle peut être installée via

Sudo apt-get install file

Dans ce cas, il nous indique entre autres informations

ac3d: ELF 32-bit LSB executable[...]
interpreter /lib/ld-linux.so.2

L'interpréteur est le morceau de logiciel chargé de charger toutes les bibliothèques partagées dont un binaire a besoin pour fonctionner. S'il est manquant, une application ne peut pas s'exécuter.

Les exécutables 32 et 64 bits nécessitent différents interprètes et différentes versions des bibliothèques partagées. Heureusement, Ubuntu (ou plus précisément Debian) a introduit un support multi-architecture très sophistiqué il y a quelque temps[cit. nécessaire]

Pour vous assurer que le système de package est préparé pour une autre architecture, vous pouvez afficher l'architecture par défaut du système avec

dpkg --print-architecture

Sur un Ubuntu 64 bits, cela sera par défaut à AMD64.

dpkg --print-foreign-architectures

imprime toutes les autres architectures dont le système de package a connaissance. Pour la prise en charge 32 bits, la sortie doit contenir i386. Si ce n'est pas le cas, on peut ajouter un support avec

Sudo dpkg --add-architecture i386

Il est nécessaire de mettre à jour la liste des packages par la suite

Sudo apt-get update

Les bibliothèques ou packages nécessaires dans leur version i386 peuvent désormais être installés avec

Sudo apt-get install <package>:i386

Plus précisément, pour installer l'interpréteur nécessaire, l'installation de GNU C Shared Library est indiqué:

Sudo apt-get install libc6:i386

Dans de nombreux cas, cela fera exécuter le binaire en question, mais bien sûr, il existe de nombreuses bibliothèques sur lesquelles une application peut être liée dynamiquement, ce qui dépend. Ceux-ci doivent être installés de la même manière. Si une bibliothèque est manquante, l'éditeur de liens donnera une erreur à l'exécution

./ac3d: error while loading shared libraries: libGLU.so.1: \
cannot open shared object file: No such file or directory

À ce stade, il faut trouver quel paquet contient ce fichier manquant. Si le package correspondant dans l'architecture native est déjà installé, on peut rechercher vi a dpkg

dpkg -S libGLU.so.1
libglu1-mesa:AMD64: /usr/lib/x86_64-linux-gnu/libGLU.so.1

Nous aurions donc besoin d'installer libglu1-mesa:i386. Répétez jusqu'à ce que toutes les dépendances soient satisfaites.

Mais souvent, une bibliothèque est complètement absente du système. Dans ce cas, on peut soit rechercher package en ligne d'Ubunt base de données, soit installer l'utilitaire apt-file et fait

apt-file search <filename> 

Un très joli HOWTO sur le support multi-Arch sur Debian (même chose pour Ubuntu) peut être trouvé ici .

Extra: Le package binutils contient des outils assez astucieux pour examiner les binaires. Il contient en particulier l'utilitaire ldd (List Dynamic Dependencies). Il répertorie toutes les bibliothèques dynamiques dont un binaire a besoin pour fonctionner.

Exemple:

ldd ac3d

produit

linux-gate.so.1 (0xf77b7000)
libfreetype.so.6 => /usr/lib/i386-linux-gnu/libfreetype.so.6 (0xf76ee000)
libGLU.so.1 => not found
libGL.so.1 => not found
libpng12.so.0 => /lib/i386-linux-gnu/libpng12.so.0 (0xf76c0000)
libXmu.so.6 => not found
libXext.so.6 => not found
libX11.so.6 => not found
libdl.so.2 => /lib/i386-linux-gnu/i686/cmov/libdl.so.2 (0xf76ba000)
libpthread.so.0 => /lib/i386-linux-gnu/i686/cmov/libpthread.so.0 (0xf769e000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf75ac000)
libm.so.6 => /lib/i386-linux-gnu/i686/cmov/libm.so.6 (0xf7566000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7549000)
libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xf739e000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xf7381000)
/lib/ld-linux.so.2 (0xf77ba000)

De cette façon, on peut découvrir rapidement quelles bibliothèques sont manquantes dans le système.

3
Nephente