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

时间:2011-01-31 14:15:02

标签: 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 :通过平台二进制兼容性,可以在版本N + 1上运行和使用gcc构建并定位版本N,以生成在版本N上运行的二进制文件+1?如果没有,什么机制会阻止它?

1 个答案:

答案 0 :(得分:2)

这是启示:你的问题是过于笼统。为了回答它,有人必须知道

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

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

防止二进制兼容性的机制太多,并且与您的操作系统和编译器供应商在打破它时的独创性直接相关。一种比较常见且有文档记载的方法是正式弃用API调用,删除附带的库,以及桥接器被烧毁,例如从a.out转到ELF。