2011-01-31 2 views
5

초기주의 사항 : 초기 컨텍스트이므로 질문은 AIX를 언급하지만 질문은 실제로 플랫폼과 상관없이 gcc 자체와 관련이 있습니다.GCC 타겟 특이성 및 이진 호환성

AIX는 역방향 바이너리 호환이 가능합니다. AIX 5.1에서 컴파일 된 C 프로그램은 5.2, 5.3, 6.1 및 7.1에서와 같이 실행됩니다.

제 생각에는 gcc는 특정 시스템을 대상으로 구축해야합니다 (크로스 컴파일의 경우 현재 또는 현재). 따라서 AIX 6.1에서 빌드 된 gcc는 AIX 6.1을 대상으로하며 바이너리 호환성 덕분에 6.1 및 7.1에서 사용할 수있는 바이너리를 생성합니다.

그러나 AIX 6.1에서 빌드 된 gcc 자체는 6.1 프로그램이므로 7.1에서 그대로 실행해야합니다. 물론 7.1로 프로그램을 컴파일한다면,이 프로그램은 7.1에 특정한 헤더를 링크 시키거나 사용할 수 있습니다. 따라서 7.1을 필요로하는 바이너리를 만듭니다. 그래서 내가 이해할 수있는 한, 7.1을 기반으로하는 gcc를 7.1 머신에 구동 할 수 있어야하고, 링크가 부작용을 일으킬 수도 있지만, 최적화되지는 않았지만 완벽하게 유효한 바이너리를 생성 할 수 있어야한다.

윤기 나는 하늘에서 무지개와 유니콘이 너무 닮았습니다. 나는 물고기 같은 냄새가 나지만 gcc 내장에 대한 지식이 부족합니다. 제발 저를 계시 해주세요.

tl; dr : 버전 N + 1에서 실행되는 바이너리를 생성하기 위해 gcc를 빌드하고 플랫폼 N 바이너리 호환성 덕분에 N + 1 버전의 OS/플랫폼을 대상으로 실행할 수 있습니까? 그렇지 않다면 어떤 메커니즘으로 막을 수 있습니까?

+0

원래 컨텍스트 : perzl.org/aix는 AIX 용 최신 RPM 패키지를 제공하는 훌륭한 노력입니다. 특히 각 AIX 버전마다 매우 유용한 GCC 패키지를 제공합니다. 불행하게도, AIX 7.1 용 GCC는 없다. 나는 AIX 6.1 용 gcc를 사용할 수있게 된 것을 행운이라고 생각한다. – Lloeki

+0

질문은 OS에서보다 구체적이어야합니다. AIX는 더 어려울 수 있으며, Linux/BSD OS는 이전/이후 버전과 더 잘 호환됩니다. 또한, 대답은 libc에 크게 의존 할 것입니다. – osgx

답변

2

여기 계발입니다. 귀하의 질문은 너무 일반적인 것입니다.. 그것은 대답하기 위해, 누군가가 당신이 상관에 대한

  • GCC의 버전을 걱정하면 약
  • 운영 체제 버전을 관심 운영 체제를

    • 의 지식을 가지고해야합니다에 대한

    및 그런 다음이 3 차원 매트릭스에서 이진 호환성을 연구하십시오.

    바이너리 호환성을 방지하는 메커니즘이 너무 많아서 OS 및 컴파일러 공급 업체의 독창성과 관련성이 있습니다. a.out에서 ELF로 이동하는 것과 같이 API 호출에 대한 공식적인 사용 중단, 선적 된 호환성 라이브러리 제거 및 교량 소각 등보다 일반적이며 문서화 된 방법 중 하나입니다.