GCC目标特异性和二元兼容性

Llo*_*eki 5 gcc binary-compatibility

初步说明:问题提到AIX,因为它是初始上下文,但问题确实与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.因此,据我所知,我应该能够将在AIX 6.1上构建的gcc运行到7.1机器上,并生成可能非最佳且完全有效的二进制文件,尽管它们需要7.1作为链接的副作用.

这看起来太像彩虹和独角兽在闪闪发光的天空中跳舞.我闻到了一些可疑的东西但却缺乏gcc内脏的知识.请强大的人群,赐教.

tl; dr:gcc是否可以构建并针对OS /平台的N版本运行,并且由于平台二进制兼容性而在版本N + 1上使用以生成在N + 1版本上运行的二进制文件?如果没有,什么机制会阻止它?

Jen*_*ens 2

这是启示:你的问题太笼统了。为了回答这个问题,某人必须具备以下知识:

  • 您关心的操作系统
  • 您关心的操作系统版本
  • 您关心的 gcc 版本

然后研究这个三维矩阵中的二进制兼容性。

阻止二进制兼容性的机制太多,并且与操作系统和编译器供应商破坏它的独创性直接相关。更常见和有记录的方法之一是官方弃用 API 调用、删除附带的兼容性库以及烧毁桥梁,例如从 a.out 到 ELF。