초기주의 사항 : 초기 컨텍스트이므로 질문은 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/플랫폼을 대상으로 실행할 수 있습니까? 그렇지 않다면 어떤 메커니즘으로 막을 수 있습니까?
원래 컨텍스트 : perzl.org/aix는 AIX 용 최신 RPM 패키지를 제공하는 훌륭한 노력입니다. 특히 각 AIX 버전마다 매우 유용한 GCC 패키지를 제공합니다. 불행하게도, AIX 7.1 용 GCC는 없다. 나는 AIX 6.1 용 gcc를 사용할 수있게 된 것을 행운이라고 생각한다. – Lloeki
질문은 OS에서보다 구체적이어야합니다. AIX는 더 어려울 수 있으며, Linux/BSD OS는 이전/이후 버전과 더 잘 호환됩니다. 또한, 대답은 libc에 크게 의존 할 것입니다. – osgx