语言兼容

GNU C, C++, Fortran 和 Java ABI 规范包括了:

  • 调用约定。规定了函数参数和返回值是如何传递的。

  • 寄存器使用。规定了寄存器时如何分配和使用的。

  • 目标文件格式。规定了目标文件的表示。

  • 数据类型的大小、布局和对齐。规定了数据是如何放在内存中的。

  • 运行时环境接口。

除了 C ABI 外,GNU C++ 还需要规定:

  • 名字重整和反重整。

  • 创建和传播异常。

  • 格式化运行时类型信息。

  • 构造函数和析构函数。

  • 类和派生类的布局、对齐和 padding。

  • 虚函数实现细节。

GNU C++ 默认使用 Itanium C++ ABI

通用编译选项

记录编译命令

使用 -frecord-gcc-switches 可以记录编译目标文件时的编译选项。例如:

$ gcc -frecord-gcc-switches -O3 -Wall hello.c -o hello
$ readelf --string-dump=.GCC.command.line hello
String dump of section '.GCC.command.line':
  [     0]  hello.c
  [     8]  -mtune=generic
  [    17]  -O3
  [    1b]  -Wall
  [    21]  -frecord-gcc-switches
Last moify: 2022-12-04 15:11:33
Build time:2025-07-18 09:41:42
Powered By asphinx