Estoy tratando de ejecutar un programa, pero ocurre un error como este:
bash: ./program: cannot execute binary file: Exec format error
El resultado de file program
fue:
program: ELF-32-bit LSB executable, ARM, EABI4 version 1 (SYSV), dynamically linked(uses share libs), for GNU/LINUX 2.6.16, not stripped
¿Cómo puedo solucionar este error?
Estoy usando Ubuntu 14.04.2 (amd64) con VMware. También probé con Ubuntu i386, pero el resultado fue el mismo.
executable
Soongeun Hwang
fuente
fuente
Respuestas:
Está intentando ejecutar un ejecutable compilado para una arquitectura ARM en una arquitectura x86-64, que es muy similar a pedirle a su procesador que solo habla inglés que tome instrucciones en chino.
Si necesita ejecutar ese ejecutable, tiene dos opciones:
Obtenga una versión x86-64 del ejecutable (por cualquier medio; si no puede obtener una versión x86-64 del ejecutable pero puede obtener su código fuente, puede intentar recompilarlo en la máquina virtual );
Instale Ubuntu Server para ARM en lugar de Ubuntu 14.04.2 (amd64). Esto requiere una máquina física que se ejecute en una arquitectura ARM o un software de virtualización que pueda emularlo.
fuente
Esto también puede ocurrir si intenta ejecutar un ejecutable x86-64 en una plataforma de 32 bits.
En una instancia específica, descargué Visual Studio Code e intenté ejecutarlo en mi instalación de Ubuntu, pero no me había dado cuenta de que había instalado Ubuntu de 32 bits en esta VM. Recibí este error, pero después de descargar la versión de 32 bits, se ejecutó sin problemas.
fuente
A menudo es posible ejecutar una imagen ejecutable ARM en un sistema amd64 si instala los paquetes binfmt-support , qemu y qemu-user-static :
qemu
luego realizará la emulación syscall cuando ejecute el ejecutable. Esto funciona para la mayoría de los archivos binarios ARM, pero hay algunos que pueden no ejecutarse correctamente.fuente
Tal error puede ocurrir si se cumple todo lo siguiente:
Si obtuvo ese archivo, digamos, en el archivo, intente descomprimirlo dentro de VM, en algún directorio dentro de la unidad virtual, no en la carpeta asignada al disco duro de su máquina host, por ejemplo
/myNewDir/
fuente
Debe compilar su archivo utilizando una arquitectura de CPU adecuada (x86, por ejemplo) y copiar el archivo .exe en su máquina Linux. Luego puede instalar mono en su máquina Linux y emitir el siguiente comando:
fuente
Si hay más de uno
java
instalado en el sistema, esto podría suceder y no establecerse como predeterminado. En Ubuntu14.04 LTS pude resolverlo ejecutando el siguiente y eligiendo eljava
que necesitaba.Elijo 2 y lo configuro
openjdk-8
como predeterminado. Lo cual no mostró elExec format error
.fuente
Esto también puede suceder si el binario usa una implementación libc que no es libc, como musl. En la actualidad, este problema específico es más probable cuando se intenta ejecutar un archivo binario con libc en un contenedor Docker con una imagen basada en alpine. No se puede hacer nada en el binario en sí para admitir ambos entornos, porque la implementación de libc siempre debe estar vinculada estáticamente, es decir, integrada directamente en el binario, por razones.
fuente