2010-01-08 15 views
20

¿Hay alguna manera de hacer un binario en una distribución de Linux y ejecutarlo en otra distribución con la misma arquitectura? ¿O debería compilarlo y compilarlo en diferentes distribuciones?Compatibilidad con Linux de distribución binaria

¿Hay alguna compatibilidad entre Redhat, distribuciones basadas en Debian para archivos binarios? (¡Quiero usar mi archivo binario Ubuntu en fedora!)

+7

Hay tantas variables por lo que la simple respuesta es: depende. Las bibliotecas compensan gran parte de esta diferencia. – jldupont

Respuesta

17

Introduzca Linux Standard Base para reducir las diferencias entre las distribuciones de Linux individuales. Ver

+2

[Linux AppChecker] (http://ldn.linuxfoundation.org/lsb/check-your-app) herramienta se basa en ** LSB ** y puede verificar la compatibilidad de su aplicación con muchas distribuciones de Linux como RedHat, Debian, SUSE y otros. – aponomarenko

+0

@aponomarenko, enlace roto. –

+2

@techtonik, el enlace alternativo es http://www.linuxfoundation.org/collaborate/workgroups/lsb/all-about-linux-application-checker – aponomarenko

2

Normalmente, está bien usar binarios en las distribuciones de Linux, siempre y cuando tenga el mismo conjunto de bibliotecas disponibles. Puede usar 'ldd' para verificar qué bibliotecas necesita un binario. libc debería tener la misma versión en las distribuciones involucradas.

3

Funciona. Pero también depende de la versión de las bibliotecas compartidas que utilice, incluidas libc, libstdC++ que son forzadas según la versión del compilador que puede diferir de la distribución a la distribución.

2

Puede vincular estáticamente sus ejecutables para la portabilidad.

+3

No, no puede. Cuando las personas lo obtienen, los ejecutables vinculados estáticamente ya no son compatibles. Lee el LSB. – Lothar

10

La vinculación estática de sus binarios los hace MENOS portátiles porque algunas bibliotecas no funcionarán correctamente para esa máquina (métodos de autenticación diferentes, etc.).

Si vincula estáticamente cualquier biblioteca "inusual" y mantiene su conjunto de distribuciones admitidas al mínimo, debería estar bien.

No enlace estáticamente la biblioteca C (o todo el binario), que es una receta para problemas :)

Mira lo que (por ejemplo) Google con Chrome.

+0

Bueno, eso no es del todo cierto, dependiendo del programa. He entregado con éxito binarios enlazados estáticamente muchas veces. Piense en un compilador: lee un archivo hace cosas y escribe un archivo. ¿Qué te hace pensar que eso no se puede vincular estáticamente? –

+0

Puedes vincular estáticamente tus binarios, pero no pueden beneficiarse de las actualizaciones de la biblioteca C, ni ser compatibles con otros cambios que las distribuciones o los administradores de usuarios finales hayan realizado, p. bibliotecas personalizadas de nss. – MarkR

6

¿En qué idioma está codificada la aplicación? Si está en un lenguaje como Python, (y sin enlaces C) o Java o cualquier otro lenguaje basado en VM, entonces creo que puede confiar en la VM para asegurarse de que su aplicación funcionará en las diferentes distribuciones de Linux.

Además, está el Linux Standard Base al que puede consultar.

HTH, Amit

4

La mejor manera es distribuir el código fuente y para que sea fácil de construir la fuente en cualquier distribución de Linux razonable. Esto es mejor que la distribución binaria porque no es suficiente para hacer que el binario sea compatible con bibliotecas compartidas. También debe asegurarse de adaptar su programa a ubicaciones de distribución y convenciones específicas para saber a dónde van las aplicaciones web, o cómo se envía el correo electrónico, o cómo se inician los servicios, o cómo determinar el tamaño de papel predeterminado, o una miríada de de otros detalles.

Consulte, por ejemplo, Debian Policy Manual para obtener un documento que describa muchas de las cosas que una distribución debe decidir para garantizar la compatibilidad entre las aplicaciones que se ejecutan en ella. No es necesario que lo lea ni lo aprenda de memoria, pero muestra el alcance de los problemas que pueden afectarlo.

Probablemente deba trabajar junto con varias de las principales distribuciones para garantizar que su aplicación funcione bien con todas ellas. La mayoría de los desarrolladores de distribuciones estarán encantados de ayudarte si te acercas educadamente. Si tiene suerte, puede atraer voluntarios de las distribuciones para que le envíen el paquete binario, y eso le dará rápidamente retroalimentación sobre lo que necesita cambiar en el nivel de origen para que su aplicación sea fácil de empaquetar.

El Linux Standard Base ya mencionado por otros intenta encontrar una solución de distribución cruzada para estas variables, pero no es completo y no es totalmente compatible con la mayoría de las distribuciones. Sin embargo, la mayoría de las distribuciones lo consideran un problema si accidentalmente rompen la compatibilidad con LSB.

5

Comprendo que esto es una pregunta muy antigua, pero se trata en lo alto de resultados de búsqueda y este no se ha mencionado:

CDE is a tool to create portable Linux applications. Esta herramienta empaqueta todos los archivos necesarios (incluidas las bibliotecas) analizando en tiempo de ejecución. Lo he usado con éxito en herramientas de línea de comandos varias veces, un ejemplo es hacer que tcpdump se ejecute en un antiguo dispositivo de hardware que ejecuta una distribución personalizada. CDE tampoco requiere fuente, simplemente empaqueta un ejecutable que puede ejecutar.

En un momento tuve un error al ejecutar el comando cde que se solucionó al anteponer el comando con LD_ASSUME_KERNEL=2.4.1, esto podría no ser necesario en versiones recientes como hace años.

Código también está en GitHub: https://github.com/pgbovine/CDE

Cuestiones relacionadas