Question bash: ./program: impossible d'exécuter un fichier binaire: erreur de format Exec


J'essaie d'exécuter un programme, mais une erreur se produit comme ceci:

bash: ./program: cannot execute binary file: Exec format error

Le résultat de file program était:

program: ELF-32-bit LSB executable, ARM, EABI4 version 1 (SYSV), dynamically linked(uses share libs), for GNU/LINUX 2.6.16, not stripped

Comment puis-je corriger cette erreur?

J'utilise Ubuntu 14.04.2 (amd64) avec VMware. J'ai aussi essayé avec Ubuntu i386, mais le résultat était le même.


66
2017-07-15 05:30


origine


C'est un exécutable ARM, c'est-à-dire que vous avez téléchargé le mauvais format exécutable ou compilé pour la mauvaise plateforme. Vous devez obtenir le bon exécutable ou recompiler. - Karl Richter


Réponses:


Vous essayez d'exécuter un exécutable compilé pour une architecture ARM sur une architecture x86-64, un peu comme si vous demandiez à votre processeur qui ne parle que l'anglais de suivre les instructions en chinois.

Si vous devez exécuter cet exécutable, vous avez deux choix:

  1. Obtenir une version x86-64 de l'exécutable (par tous les moyens; si vous ne parvenez pas à obtenir une version x86-64 de l'exécutable mais que vous pouvez obtenir son code source, vous pouvez essayer de le recompiler sur la machine virtuelle );

  2. Installer Ubuntu Server pour ARM à la place d'Ubuntu 14.04.2 (amd64). Cela nécessite soit une machine physique fonctionnant sur une architecture ARM, soit un logiciel de virtualisation capable de l’émuler.


56
2017-07-15 05:39





Cela peut également se produire si vous essayez d'exécuter un exécutable x86-64 sur une plate-forme 32 bits.

Dans un cas spécifique, j'ai téléchargé Visual Studio Code et essayé de l'exécuter sur mon installation Ubuntu, mais je n'avais pas réalisé que j'avais installé Ubuntu 32 bits sur cette machine virtuelle. J'ai eu cette erreur, mais après avoir téléchargé la version 32 bits, elle a fonctionné sans problème.


19
2017-09-10 23:44





Il est souvent possible d'exécuter une image exécutable ARM sur un système amd64 si vous installez le binfmt-support Install binfmt-support, qemu Install qemu, et qemu-user-static Install qemu-user-static paquets:

sudo apt install binfmt-support qemu qemu-user-static

qemu effectuera ensuite une émulation syscall lorsque vous exécuterez l'exécutable. Cela fonctionne pour la plupart des binaires ARM, mais il y en a quelques-uns qui risquent de ne pas fonctionner correctement.


6
2017-10-27 06:41



sudo apt-get installer binfmt-support qemu qemu-user-static - Momin Al Aziz


Une telle erreur peut se produire si toutes les conditions suivantes sont remplies:

  • L'exécutable n'est pas un fichier mais un lien
  • Vous exécutez le lancer à l'intérieur de la VM
  • Le fichier est situé dans le dossier partagé
  • Votre hôte est Windows.

Si vous avez ce fichier, disons, en archive - essayez de le décompresser à l'intérieur de la VM, dans un répertoire du lecteur virtuel, pas dans un dossier mappé sur le disque dur de votre machine hôte, par exemple /myNewDir/


6
2017-11-13 22:22



C'est très utile. Pour moi, j'ai créé un raccourci (lien) vers ce fichier exécutable, puis l'exécution du raccourci m'a donné l'erreur. - Duc Tran


Si plusieurs java est installé sur le système, cela peut arriver et ne pas être défini par défaut. Sur Ubuntu14.04 LTS, je pourrais le résoudre en exécutant la suite et en choisissant le java J'ai eu besoin.

sudo update-alternatives --config java
[sudo] password for user: 
update-alternatives: warning: /etc/alternatives/java has been changed (manually or by a script); switching to manual updates only
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      auto mode
  1            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      manual mode
  2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1069      manual mode

Press enter to keep the current choice[*], or type selection number: 2
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java to provide /usr/bin/java (java) in manual mode

J'ai choisi 2 et mis openjdk-8 par défaut. Qui n'a pas montré la Exec format error.


2
2018-06-06 13:43





Vous devez compiler votre fichier en utilisant une architecture de processeur appropriée (x86 par exemple) et copier le fichier .exe sur votre machine Linux. Vous pouvez ensuite installer mono sur votre machine Linux et émettre la commande suivante:

mono myprogram.exe

1
2018-02-28 19:49