Cómo corregir 'no se puede ejecutar un archivo binario: error de formato Exec' en Ubuntu

Cómo corregir 'no se puede ejecutar un archivo binario: error de formato Exec' en Ubuntu

Si bien no debería suceder cuando se utilizan los repositorios oficiales de apt-get, si descarga software de Internet y lo ejecuta, existe la posibilidad de que vea el temido bash: ./nameOfProgram: no se puede ejecutar el archivo binario: error de formato Exec . Este error, que suele ir seguido de bash: ./nameOfProgram.sh: Permiso denegado o algo parecido, indica que Ubuntu no pudo interactuar correctamente con el binario que descargaste. Esto se debe a que, aunque aparentemente es un binario de Linux válido, está diseñado para un conjunto de chips diferente al que admite actualmente su kernel.

La mayoría de las personas que usan Ubuntu utilizan procesadores de 32 o 64 bits basados ​​en una arquitectura estándar que lanzó Intel, independientemente de quién fabricó realmente sus microchips. Es importante recordar que los procesadores de 64 bits pueden ejecutarse en modo de 32 bits, por lo que si recibe este error aunque tenga un procesador de 64 bits, existe la posibilidad de que esté ejecutando una versión de 32 bits de Ubuntu. Unos pocos comandos simples son todo lo que se necesita para saber cómo está funcionando su chip.

Método 1: uso del comando arch

Si no está familiarizado con el tipo de microprocesador que ha instalado en su máquina, primero querrá usar el comando arch desde la línea de comandos. Solo verá una única línea de salida que se le devuelva después de ejecutar este comando. En muchos casos, verá i686, lo que significa que está en un procesador de 32 bits y, por lo tanto, no puede ejecutar binarios x86_64. Si, en cambio, ve amd64 o algo similar, entonces está en un procesador x86_64 y, al menos en teoría, debería poder ejecutar la mayoría de los binarios de 32 y 64 bits. A diferencia de Microsoft Windows, Ubuntu Linux en realidad contiene las herramientas adecuadas para permitir a los usuarios de conjuntos de chips de 644 bits ejecutar programas de Windows de 16 bits en su sistema operativo también en muchos casos.



Estos términos siguen siendo válidos incluso si no está utilizando ese modelo particular de microchip. Por ejemplo, i686 es la forma en que Linux se refiere a muchos procesadores de 32 bits, incluso si en realidad no son chips Intel 80686. Incluso si está utilizando tecnología Intel de 64 bits, es posible que arch todavía llame a su procesador un chip amd64. Esto no indica un error y se puede ignorar con seguridad. Puedes usar gato / proc / cpuinfo o más / proc / cpuinfo para averiguar el tipo exacto de procesador que está utilizando. Dado que las líneas en este archivo son largas, es posible que desee presionar F11 antes de emitirlo si está utilizando una ventana de terminal gráfica. Los usuarios de una consola virtual, especialmente aquellos que trabajan con un servidor Ubuntu, no tendrán que preocuparse tanto.

Es posible que vea algunos otros tipos de salida, que podrían restringir aún más sus opciones cuando se trata de ejecutar software. Ubuntu admitió la arquitectura PowerPC durante más tiempo, que se encuentra en algunas estaciones de trabajo, así como en muchas máquinas Macintosh clásicas y OS X Macintosh más antiguas. De hecho, todavía puede encontrar repositorios de Ubuntu para estas arquitecturas, aunque hoy en día reciben poco soporte. Sin embargo, es muy probable que no pueda ejecutar muchos binarios de Linux que descargue de Internet fuera de los repositorios oficiales en este caso. Eso no significa que Ubuntu no funcione en estas máquinas, aunque es posible que desee ver la distribución más ligera de Lubuntu.

Método 2: usar el comando de archivo

El comando de archivo identifica los diferentes archivos que contienen y, por lo general, es muy preciso. Intente identificar el archivo en cuestión escribiendo archivo nameOfProgram para ver si obtiene ELF de 32 bits o ELF de 64 bits como salida. Si le dice que es un binario ELF de 64 bits y recibió i686 como salida del comando arch, entonces no hay forma de que pueda ejecutarlo razonablemente en su máquina. Si está en un microprocesador de 64 bits que ejecuta Ubuntu de 32 bits, entonces técnicamente podría reinstalar el sistema operativo, aunque este es un paso un poco extremo para ejecutar un solo programa.

También existe la posibilidad muy real, por pequeña que sea, de que en su lugar te encuentres con un binario que cuando intentas ejecutarlo arroja caracteres basura al terminal incluso si has ejecutado un escaneo de malware en él. Estos caracteres generalmente toman la forma de bloques en forma de rombo o, alternativamente, cubos rectangulares que tienen valores numéricos en ellos. Algunos informáticos llaman a este último tofu y representan los valores Unicode de los caracteres que los tipos de letra actualmente instalados no podrán mostrar. Si el terminal los muestra así, puede estar seguro de que no se trata de un error de fuente ni de nada que ver con malware. Más bien, esto se debe simplemente a que el código de operación del microprocesador compilado dentro del binario es tan ajeno a su sistema que no sabe cómo interpretar parte del código.

La mejor forma de solucionar este problema es instalar el paquete adecuado para su arquitectura. Si está instalando paquetes desde dentro de Ubuntu, entonces el sistema apt-get o el administrador gráfico Synaptic lo tiene cubierto sin ningún problema. Si está descargando paquetes de otra distribución, deberá encontrar el adecuado para su arquitectura. Tomemos, por ejemplo, la lista de Arch Linux del paquete gvim. Si bien el paquete predeterminado presenta la arquitectura x86_64, también hay uno para el chipset i686. Este funcionará en máquinas de 32 bits que funcionan con la estructura de interrupción de Intel, pero recuerde que los términos i686 y 32 bits no se incluyen mutuamente todo el tiempo, ya que otros conjuntos de chips compatibles con Linux en realidad cuentan con sus propias implementaciones de 32 bits.

Los usuarios que exploran toda la escena GNU / Linux pueden encontrar binarios compilados para tecnologías mucho más exóticas que estas. Linux es verdaderamente una escena de código multiplataforma, por lo que verá que OpenRISC, MIPS, SPARC, M32R, MN103, ARM, ARC, Alpha y muchos otros estándares binarios están compilados para trabajar. Lo más probable es que no pueda ejecutar ninguno de estos, aunque ARM es una plataforma para tabletas y teléfonos inteligentes extremadamente popular. También es la plataforma en la que se basa Raspberry Pi, lo que significa que si realmente está ejecutando Ubuntu en un dispositivo móvil o la distribución Ubuntu MATE para Raspberry Pi, en realidad los necesitará en lugar de los binarios Intel de 32 bits o x86_64.

4 minutos de lectura