Estou tentando executar um programa, mas ocorre um erro assim:
bash: ./program: cannot execute binary file: Exec format error
O resultado file program
foi:
program: ELF-32-bit LSB executable, ARM, EABI4 version 1 (SYSV), dynamically linked(uses share libs), for GNU/LINUX 2.6.16, not stripped
Como posso corrigir este erro?
Estou usando o Ubuntu 14.04.2 (amd64) com o VMware. Eu também tentei com o Ubuntu i386, mas o resultado foi o mesmo.
executable
Soongeun Hwang
fonte
fonte
Respostas:
Você está tentando executar um executável compilado para uma arquitetura ARM em uma arquitetura x86-64, que é como pedir ao seu processador que só fala inglês para tomar instruções em chinês.
Se você precisar executar esse executável, terá duas opções:
Obtenha uma versão x86-64 do executável (de qualquer forma; se você não conseguir obter uma versão x86-64 do executável, mas conseguir o código fonte, tente recompilar na máquina virtual );
Instale o Ubuntu Server for ARM no lugar do Ubuntu 14.04.2 (amd64). Isso requer uma máquina física executando em uma arquitetura ARM ou um software de virtualização que possa emulá-la.
fonte
Isso também pode ocorrer se você tentar executar um executável x86-64 em uma plataforma de 32 bits.
Em uma instância específica, baixei o Visual Studio Code e tentei executá-lo na instalação do Ubuntu, mas não havia percebido que havia instalado o Ubuntu de 32 bits nesta VM. Eu recebi esse erro, mas depois de baixar a versão de 32 bits, ela foi executada sem problemas.
fonte
Geralmente, é possível executar uma imagem executável do ARM em um sistema amd64 se você instalar os pacotes binfmt-support , qemu e qemu-user-static :
qemu
executará a emulação syscall quando você executar o executável. Isso funciona para a maioria dos binários do ARM, mas existem alguns que podem não funcionar corretamente.fonte
Esse erro pode ocorrer se todas as seguintes opções forem verdadeiras:
Se você obteve esse arquivo, digamos, no arquivo morto - tente descompactá-lo na VM, em algum diretório da unidade virtual, não na pasta mapeada para o disco rígido da máquina host, por exemplo
/myNewDir/
fonte
Você deve compilar seu arquivo usando uma arquitetura de CPU apropriada (x86 por exemplo) e copiar o arquivo .exe em sua máquina Linux. Em seguida, você pode instalar o mono em sua máquina Linux e emitir o seguinte comando:
fonte
Se mais de um
java
estiver instalado no sistema, isso pode ocorrer e não ser definido como padrão. No Ubuntu14.04 LTS eu conseguia resolver o problema executando o seguinte e escolhendo o quejava
eu precisava.Eu escolho 2 e defino
openjdk-8
como padrão. O que não mostrou oExec format error
.fonte
Isso também pode acontecer se o binário usar uma implementação libc que não seja libc, como musl. Hoje em dia, é mais provável que esse problema específico seja encontrado ao tentar executar um binário com libc em um contêiner do Docker com uma imagem baseada em alpino. Não há nada que possa ser feito no próprio binário para suportar os dois ambientes, porque a implementação da libc sempre deve ser vinculada estaticamente, ou seja, embutida diretamente no binário, por razões.
fonte