2011-01-31 21 views
5

Nota inicial: La pregunta menciona AIX porque es el contexto inicial, pero la pregunta realmente se refiere a gcc en sí misma, probablemente independientemente de la plataforma.Especificidad de destino de GCC y compatibilidad binaria

AIX se supone que es compatible con versiones anteriores binarias: un programa C compilado en AIX 5.1 se ejecutará como en 5.2, 5.3, 6.1 y 7.1.

En mi comprensión, gcc debe estar diseñado para apuntar a un sistema específico (ya sea el actual u otro en el caso de la compilación cruzada). Por lo tanto, gcc basado en AIX 6.1 se dirige a AIX 6.1 y produce binarios que se pueden usar en 6.1 y 7.1 gracias a la compatibilidad binaria.

Sin embargo, gcc sí mismo construido en AIX 6.1 es un programa 6.1, por lo que debe ejecutarse en 7.1 como está. Por supuesto, si compilo un programa con él en 7.1, este programa puede vincularse o usar encabezados específicos para 7.1, lo que hace que el binario resultante requiera 7.1. Por lo que yo entiendo, debería ser capaz de ejecutar gcc construido en AIX 6.1 en una máquina 7.1, y producir binarios quizás no óptimos pero perfectamente válidos, aunque requerirían 7.1 como efecto secundario de la vinculación.

Esto se parece demasiado a arcoiris y unicornios bailando en un cielo resplandeciente. Huelo algo a pescado, pero no tengo ningún conocimiento de las entrañas gcc. Por favor multitud poderosa, ilumíname.

tl; dr: ¿Puede gcc construido sobre y la orientación de una versión N de un OS/plataforma puede ejecutar y se utiliza en la versión N + 1 en virtud de la plataforma de la compatibilidad binaria para producir binarios que se ejecutan en la versión N + 1? Si no, ¿qué mecanismo lo evitaría?

+0

Contexto original: perzl.org/aix es una empresa maravillosa que proporciona paquetes actualizados de RPM para AIX. En particular, proporciona paquetes GCC muy útiles, uno para cada versión de AIX. Desafortunadamente, no hay GCC para AIX 7.1. Me consideraría afortunado de poder usar gcc para AIX 6.1. – Lloeki

+0

La pregunta debería ser más específica en el sistema operativo. AIX puede ser más difícil, y los sistemas operativos Linux/BSD son más compatibles con las versiones más antiguas/más recientes. Además, la respuesta dependerá en gran medida de libc. – osgx

Respuesta

2

Aquí está la ilustración: su pregunta es la forma demasiado general. Con el fin de responder a ella, alguien tendría que tener conocimiento de

  • los sistemas operativos que le preocupan
  • las versiones del sistema operativo que se preocupan por
  • las versiones de gcc que le interesan

y luego investigue la compatibilidad binaria en esta matriz tridimensional.

Los mecanismos que impiden la compatibilidad binaria son demasiados y se relacionan directamente con el ingenio del fabricante y el fabricante del compilador para romperlo. Una de las formas más comunes y documentadas es la desactivación oficial de las llamadas API, la eliminación de bibliotecas de compatibilidad enviadas y los puentes que se están quemando, como pasar de a.out a ELF.

Cuestiones relacionadas