Como corrigir 'não é possível executar o arquivo binário: erro de formato Exec' no Ubuntu



Experimente Nosso Instrumento Para Eliminar Problemas

Embora não deva acontecer ao usar os repositórios oficiais do apt-get, se você fizer o download do software da Internet e executá-lo, há uma chance de ver o temido bash: ./nameOfProgram: não é possível executar o arquivo binário: erro de formato Exec . Este erro, que geralmente é seguido por bash: ./nameOfProgram.sh: Permissão negada ou algo parecido, indica que o Ubuntu não foi capaz de interagir corretamente com o binário que você baixou. Isso porque, embora seja aparentemente um binário válido do Linux, ele foi projetado para um chipset diferente do que o seu kernel suporta atualmente.



A maioria das pessoas que usam o Ubuntu usa processadores de 32 ou 64 bits baseados em uma arquitetura padrão que a Intel lançou, independentemente de quem realmente fez seus microchips. É importante lembrar que os processadores de 64 bits podem ser executados no modo de 32 bits, então, se você estiver recebendo esse erro mesmo tendo um processador de 64 bits, é possível que você esteja executando uma versão de 32 bits do Ubuntu. Bastam alguns comandos simples para saber como seu chip está operando.



Método 1: usando o comando de arco

Se você não está familiarizado com o tipo de microprocessador que instalou em sua máquina, primeiro você desejará usar o comando arch na linha de comando. Você verá apenas uma única linha de saída retornada para você depois de executar este comando. Em muitos casos, você verá i686, o que significa que você está em um processador de 32 bits e, portanto, não pode executar binários x86_64. Se, em vez disso, você vir amd64 ou algo semelhante, então você está em um processador x86_64 e deve, pelo menos teoricamente, ser capaz de executar a maioria dos binários de 32 e 64 bits. Ao contrário do Microsoft Windows, o Ubuntu Linux contém, na verdade, as ferramentas adequadas para permitir que os usuários de chipsets de 644 bits executem programas Windows de 16 bits em seu sistema operacional em muitos casos.



Esses termos ainda são verdadeiros, mesmo se você não estiver realmente usando esse modelo específico de microchip. Por exemplo, i686 é como o Linux se refere a muitos processadores de 32 bits, mesmo que eles não sejam realmente chips Intel 80686. Mesmo se você estiver usando a tecnologia Intel de 64 bits, a arch ainda pode chamar seu processador de chip amd64. Isso não indica um erro e pode ser ignorado com segurança. Você pode usar gato / proc / cpuinfo ou mais / proc / cpuinfo para descobrir o tipo exato de processador que você está usando. Uma vez que as linhas neste arquivo são longas, você pode querer pressionar F11 antes de emiti-lo, se estiver usando uma janela de terminal gráfico. Os usuários de um console virtual, especialmente aqueles que trabalham com o servidor Ubuntu, não terão que se preocupar tanto.

Você pode ver alguns outros tipos de saída, o que pode restringir ainda mais suas opções quando se trata de executar o software. O Ubuntu suportou a arquitetura PowerPC por mais tempo, que é encontrada em algumas estações de trabalho, bem como em muitas máquinas Macintosh clássicas e OS X Macintosh mais antigas. Você ainda pode encontrar repositórios do Ubuntu para essas arquiteturas, embora elas recebam pouco suporte hoje. No entanto, é mais do que provável que você não consiga executar muitos binários do Linux baixados da Internet fora dos repositórios oficiais neste caso. Isso não significa que o Ubuntu não funcione nessas máquinas, embora você possa querer dar uma olhada na distribuição mais leve do Lubuntu.

Método 2: usando o comando de arquivo

O comando file identifica o que os diferentes arquivos contêm e geralmente é muito preciso. Tente identificar o arquivo em questão digitando arquivo nameOfProgram para ver se você obtém ELF de 32 bits ou ELF de 64 bits como saída. Se ele disser que é um binário ELF de 64 bits e você recebeu i686 como saída do comando arch, não há como executá-lo razoavelmente em sua máquina. Se você estiver usando um microprocessador de 64 bits executando o Ubuntu de 32 bits, poderá tecnicamente reinstalar o sistema operacional, embora essa seja uma etapa um pouco extrema para executar um único programa.



Há também a possibilidade muito real, por menor que seja, de que você possa encontrar um binário que, ao tentar executá-lo, expele caracteres indesejados para o terminal, mesmo que você tenha executado uma verificação de malware. Esses caracteres geralmente assumem a forma de blocos em forma de losango ou, alternativamente, cubos retangulares que contêm valores numéricos. Alguns cientistas da computação chamam o último de tofu e representam os valores Unicode de caracteres que suas fontes atualmente instaladas não serão capazes de exibir. Se o terminal os estiver exibindo assim, você pode ter certeza de que não se trata de um erro de fonte nem de qualquer coisa relacionada a malware. Em vez disso, isso ocorre simplesmente porque o opcode do microprocessador compilado dentro do binário é tão estranho para o seu sistema que ele não sabe como interpretar parte do código.

A melhor maneira de corrigir isso é instalar o pacote apropriado para sua arquitetura. Se você estiver instalando pacotes de dentro do Ubuntu, então o sistema apt-get ou o gerenciador gráfico Synaptic irá ajudá-lo sem problemas. Se estiver baixando pacotes de outra distribuição, você precisará encontrar o certo para sua arquitetura. Veja, por exemplo, a listagem do pacote gvim do Arch Linux. Enquanto o pacote padrão apresenta a arquitetura x86_64, há também um para o chipset i686. Este funcionará em máquinas de 32 bits que funcionam com a estrutura de interrupção da Intel, mas lembre-se de que os termos i686 e 32 bits não são mutuamente inclusivos o tempo todo, já que outros chipsets suportados pelo Linux na verdade apresentam suas próprias implementações de 32 bits.

Usuários explorando toda a cena GNU / Linux podem encontrar binários compilados para tecnologias muito mais exóticas do que essas. O Linux é realmente uma cena de código de plataforma cruzada, então você verá OpenRISC, MIPS, SPARC, M32R, MN103, ARM, ARC, Alpha e muitos outros binários de padrões compilados para trabalhar. Muito provavelmente, você não conseguirá executar nenhum desses, embora o ARM seja uma plataforma de tablet e smartphone extremamente popular. É também a plataforma em que o Raspberry Pi se baseia, o que significa que se você estiver realmente executando o Ubuntu em um dispositivo móvel ou a distribuição Ubuntu MATE para Raspberry Pi, você realmente precisará deles em vez dos binários Intel de 32 bits ou x86_64.

4 minutos lidos