Comment réparer 'Impossible d'exécuter le fichier binaire: erreur de format Exec' sur Ubuntu

Bien que cela ne devrait pas se produire lors de l'utilisation des référentiels officiels apt-get, si vous téléchargez un logiciel sur Internet et que vous l'exécutez, il est possible que vous voyiez le redoutable bash: ./nameOfProgram: impossible d'exécuter le fichier binaire: erreur de format Exec . Cette erreur, qui est généralement suivie de bash: ./nameOfProgram.sh: Autorisation refusée ou quelque chose comme ça, indique qu'Ubuntu n'a pas pu s'interfacer correctement avec le binaire que vous avez téléchargé. En effet, bien qu'il s'agisse apparemment d'un binaire Linux valide, il est conçu pour un chipset différent de celui que votre noyau prend actuellement en charge.

La plupart des utilisateurs d'Ubuntu utilisent des processeurs 32 bits ou 64 bits basés sur une architecture standard publiée par Intel, quel que soit le fabricant de leurs puces. Il est important de se rappeler que les processeurs 64 bits peuvent fonctionner en mode 32 bits, donc si vous obtenez cette erreur même si vous avez un processeur 64 bits, il est possible que vous exécutiez une version 32 bits d'Ubuntu. Quelques commandes simples suffisent pour savoir comment fonctionne votre puce.

Méthode 1: Utilisation de la commande arch

Si vous ne connaissez pas le type de microprocesseur que vous avez installé sur votre machine, vous devez d'abord utiliser la commande arch à partir de la ligne de commande. Vous ne verrez qu'une seule ligne de sortie qui vous est renvoyée après l'exécution de cette commande. Dans de nombreux cas, vous verrez i686, ce qui signifie que vous êtes sur un processeur 32 bits et que vous ne pouvez donc pas exécuter de binaires x86_64. Si vous voyez à la place amd64 ou quelque chose de similaire, alors vous êtes sur un processeur x86_64, et devrait au moins théoriquement être capable d'exécuter la plupart des binaires 32 bits et 64 bits. Contrairement à Microsoft Windows, Ubuntu Linux contient en fait les outils appropriés pour permettre aux utilisateurs de chipsets 644 bits d'exécuter des programmes Windows 16 bits dans leur système d'exploitation dans de nombreux cas également.

Ces termes sont toujours valables même si vous n'utilisez pas réellement ce modèle particulier de micropuce. Par exemple, i686 est la façon dont Linux fait référence à de nombreux processeurs 32 bits, même s'ils ne sont pas réellement des puces Intel 80686. Même si vous utilisez la technologie Intel 64 bits, arch peut toujours appeler votre processeur une puce amd64. Cela n'indique pas une erreur et peut être ignoré en toute sécurité. Vous pouvez utiliser cat / proc / cpuinfo ou more / proc / cpuinfo pour connaître le type exact de processeur que vous utilisez. Étant donné que les lignes de ce fichier sont longues, vous voudrez peut-être pousser F11 avant de l'exécuter si vous utilisez une fenêtre de terminal graphique. Les utilisateurs d'une console virtuelle, en particulier ceux qui travaillent avec le serveur Ubuntu, n'auront pas à s'inquiéter autant.

Vous pouvez voir d'autres types de sortie, ce qui pourrait restreindre davantage vos options lors de l'exécution de logiciels. Ubuntu a pris en charge l'architecture PowerPC pendant la plus longue période, que l'on retrouve sur certaines stations de travail ainsi que sur de nombreux ordinateurs Macintosh classiques et Macintosh OS X plus anciens. Vous pouvez toujours trouver des référentiels Ubuntu pour ces architectures, bien qu'ils reçoivent peu de support aujourd'hui. Cependant, vous ne pourrez probablement pas exécuter de nombreux binaires Linux que vous téléchargez depuis Internet en dehors des référentiels officiels dans ce cas. Cela ne signifie pas qu'Ubuntu ne fonctionne pas sur ces machines, bien que vous souhaitiez peut-être regarder la distribution plus légère de Lubuntu.

Méthode 2: Utilisation de la commande de fichier

La commande file identifie ce que contiennent les différents fichiers et est généralement très précise. Essayez d'identifier le fichier en question en tapant le nom du fichierOfProgram pour voir si vous obtenez ELF 32 bits ou ELF 64 bits en sortie. S'il vous indique qu'il s'agit d'un binaire ELF 64 bits et que vous avez reçu i686 en sortie de la commande arch, vous ne pouvez pas raisonnablement l'exécuter sur votre machine. Si vous utilisez un microprocesseur 64 bits exécutant Ubuntu 32 bits, vous pouvez techniquement réinstaller le système d'exploitation, bien que ce soit une étape un peu extrême pour exécuter un seul programme.

Il existe également la possibilité très réelle, même légère, que vous rencontriez à la place un binaire qui, lorsque vous essayez de l'exécuter, crache des caractères indésirables vers le terminal, même si vous avez effectué une analyse de malware dessus. Ces caractères prennent généralement la forme de blocs en forme de losange ou de cubes rectangulaires contenant des valeurs numériques. Certains informaticiens appellent ce dernier tofu et représentent les valeurs Unicode des caractères que vos polices actuellement installées ne pourront pas afficher. Si le terminal les affiche comme ceci, alors vous pouvez être assuré qu'il ne s'agit ni d'une erreur de police ni de quoi que ce soit ayant à voir avec des logiciels malveillants. C'est simplement parce que l'opcode du microprocesseur compilé à l'intérieur du binaire est si étranger à votre système qu'il ne sait pas comment interpréter une partie du code.

La meilleure façon de résoudre ce problème est d'installer le package approprié pour votre architecture. Si vous installez des packages depuis Ubuntu, alors le système apt-get ou le gestionnaire graphique Synaptic vous a couvert sans aucun problème. Si vous téléchargez des packages à partir d'une autre distribution, vous devrez trouver celui qui convient à votre architecture. Prenez, par exemple, la liste d'Arch Linux du paquet gvim. Bien que le package par défaut présente l'architecture x86_64, il en existe également un pour le chipset i686. Celui-ci fonctionnera sur des machines 32 bits qui fonctionnent avec la structure d'interruption Intel, mais rappelez-vous que les termes i686 et 32 ​​bits ne sont pas mutuellement inclusifs tout le temps, car les autres chipsets pris en charge par Linux comportent en fait leurs propres implémentations 32 bits.

Les utilisateurs qui explorent toute la scène GNU / Linux peuvent rencontrer des binaires compilés pour des technologies bien plus exotiques que celles-ci. Linux est vraiment une scène de code multiplateforme, vous verrez donc OpenRISC, MIPS, SPARC, M32R, MN103, ARM, ARC, Alpha et de nombreux autres binaires standards sont compilés pour fonctionner. Plus que probablement, vous ne pourrez exécuter aucun de ces derniers, bien que ARM soit une plate-forme de tablette et de smartphone extrêmement populaire. C'est également la plate-forme sur laquelle le Raspberry Pi est basé, ce qui signifie que si vous exécutez réellement Ubuntu sur un appareil mobile ou la distribution Ubuntu MATE pour Raspberry Pi, vous en aurez besoin au lieu des binaires Intel 32 bits ou x86_64.