【发布时间】:2011-01-31 14:15:02
【问题描述】:
初始说明:问题提到 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:基于平台二进制兼容性构建并针对版本 N 的操作系统/平台的 gcc 能否在版本 N+1 上运行和使用,以生成在版本 N 上运行的二进制文件+1?如果不是,什么机制可以阻止它?
【问题讨论】:
-
原文:perzl.org/aix 是一项出色的工作,它为 AIX 提供了最新的 RPM 包。它特别提供了非常有用的 GCC 包,每个 AIX 版本都有一个。不幸的是,AIX 7.1 没有 GCC。我认为自己很幸运能够将 gcc 用于 AIX 6.1。
-
这个问题应该在操作系统中更具体。 AIX 可能更难,Linux/BSD 操作系统与旧/新版本更兼容。此外,答案将在很大程度上取决于 libc。