【发布时间】:2019-09-11 01:55:45
【问题描述】:
1) 编译器遵循哪个 ABI 来编译 C 代码,我怎么知道它(例如 GCC)?
2)我从网上了解到有很多ABI。我想知道在 x86-64 类 Unix 平台上,所有系统和编译器都遵循相同的 ABI 吗?如果他们这样做,他们遵循哪个 ABI?是 System V ABI(https://github.com/hjl-tools/x86-psABI/wiki/x86-64-psABI-1.0.pdf)?
我使用gcc -v --help 来查看帮助手册。但它们似乎都没有显示 ABI 信息。
【问题讨论】:
-
如果针对 Linux,该平台的所有编译器都符合您在问题中引用的 x86-64 System V ABI
-
但是像 GNU ABI 这样的其他 ABI 怎么样?它们有什么区别?
-
x86-64 System V ABI 是 Linux 上调用约定的 THE ABI。 ABI 涵盖了 Linux 系统调用的软件调用约定和系统调用调用约定。其他一切都建立在此之上。
-
您还会发现您链接到的文档讨论了所使用的 C++ ABI,并且它们指向外部参考。还指定了 Fortran 的调用约定。
-
非常感谢。现在我明白了他们之间的关系。