5

初始说明:问题提到了 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。据我了解,我应该能够在 7.1 机器上运行基于 AIX 6.1 构建的 gcc,并生成可能不是最佳但完全有效的二进制文件,尽管它们需要 7.1 作为链接的副作用。

这看起来太像在闪闪发光的天空中跳舞的彩虹和独角兽。我闻到了腥味,但对 gcc 内脏一无所知。请各位大侠赐教。

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

4

1 回答 1

2

这里的启示:你的问题太笼统了。为了回答这个问题,必须有人知道

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

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

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

于 2011-09-03T15:24:12.280 回答