首页 文章

编译和ABI如何相关?

提问于
浏览
3

编译和ABI如何相关?

编译器的唯一工作是为OS和/或其他应用程序构建应用程序二进制接口(ABI)吗?

关于ABI,引自Wikipedia

ABI涵盖数据类型,大小和对齐等细节;调用约定,它控制函数参数的传递方式并返回检索的值;系统调用号码以及应用程序应如何向操作系统发出系统调用;并且在完整的操作系统ABI的情况下,目标文件,程序库等的二进制格式 .

感谢致敬!

3 回答

  • 0

    ABI描述了底层操作系统的功能,并包含有关如何编译程序的一些规则 . 它's the compiler'的工作不是"build" ABI,而是在创建可执行代码时符合ABI .

  • 4

    好吧,编译器可能不完全遵循ABI . 它必须发出有效的机器代码,但是例如它可能不遵循内部函数调用的调用约定 . 但是,当然,在编译代码和OS之间的边界上,编译器应该遵循ABI .

  • 2

    编译器必须从源输出目标文件 . 这取决于架构,例如寻址模式可用性,可用寄存器以及ABI中阐明的这些 . 此外,出于性能原因,OS与架构紧密耦合,因此除非您正在编写固件,否则OS的系统调用调用约定以及任何此类相关详细信息都是ABI parcel的一部分 .

    编译器通过机器级操作码和数据替换高级源文本 . 根据工具链的要求,输出必须符合要求 . 例如,针对Windows的链接器将需要PE格式的目标文件以支持Windows库,并且如果工具链中的编译器输出到其他格式之一(如ELF),则需要其他格式 .

相关问题