Ejecutable compilado

Ejecutable compilado

Si, por ejemplo, he compilado un programa C simple que usa GTK 3 en una máquina que ejecuta Ubuntu, ¿podré ejecutarlo en otras versiones de Linux?

Nota: Mi pregunta real es "¿Debería etiquetar mi programa compilado para Linux o solo para Ubuntu?"

p.ej. ¿Debo etiquetar mi página de descargas como

Windows
    program.exe

Linux
    program

Macintosh
    program.app

o

Windows
    program.exe

Ubuntu < Version 17.04
    program

Macintosh
    program.app

Respuesta1

Los ejecutables de Linux no son específicos de una distribución de Linux. Pero son específicos de una arquitectura de procesador y de un conjunto de versiones de biblioteca.

Un ejecutable paracualquierEl sistema operativo es específico de una arquitectura de procesador. A los usuarios de Windows y Mac no les importa tanto porque estos sistemas operativos más o menos solo se ejecutan en una única arquitectura. (OSX solía ejecutarse en múltiples arquitecturas de procesador, y las aplicaciones OSX generalmente se distribuían como un paquete que contenía código para todas las arquitecturas de procesador compatibles, pero el OSX moderno solo se ejecuta en procesadores amd64. Windows se ejecuta en procesadores Intel de 32 y 64 bits , por lo que es posible que encuentre ejecutables de Windows de “32 bits” y “64 bits”).

Windows resuelve el problema de la dependencia de las bibliotecas obligando a los programadores a agrupar todas las bibliotecas que utilizan con su programa. En Linux, es poco común hacer esto, con el beneficio de que los programadores no necesitan agrupar bibliotecas y los usuarios obtienen actualizaciones de seguridad y correcciones de errores oportunas para las bibliotecas, pero con el costo de que los programas deben compilarse de manera diferente para diferentes versiones de distribuciones. .

Por lo tanto, debes etiquetar tu binario como “Linux, PC de 64 bits (amd64), compilado para Ubuntu 17.04” (o “PC de 32 bits (i386)” si se trata de un ejecutable de 32 bits), y proporcionar el detalle del bibliotecas requeridas. Puedes ver las bibliotecas utilizadas por un ejecutable con el lddcomando: ejecutar ldd program. La parte anterior a =>es lo que importa, por ejemplo, libgtk-3.so.0es la biblioteca principal GTK3, con la versión 0 (si alguna vez existiera una versión 1, sería incompatible con la versión 0, esa es la razón para cambiar el número de versión). Algunas de estas bibliotecas son cosas que todos tendrían de todos modos porque no han cambiado en muchos años; Sólo la experiencia o una comparación al observar múltiples distribuciones y múltiples lanzamientos pueden indicarle esto. Los usuarios de otras distribuciones pueden ejecutar el mismo binario si tienen versiones compatibles de las bibliotecas.

información relacionada