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