
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 ldd
comando: ejecutar ldd program
. La parte anterior a =>
es lo que importa, por ejemplo, libgtk-3.so.0
es 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.