System V ABI与Itanium C++ ABI是否相关?Linux编译合规性疑问
System V ABI 与 Itanium C++ ABI 的关系及x86-64 Linux下的兼容性
二者的关系
- System V ABI是一套通用系统级ABI,定义了类Unix系统(包括x86-64 Linux)中底层的交互规则:比如C函数的调用约定、寄存器使用规范、栈帧布局、系统调用接口、数据类型的内存表示等,是所有编译型语言在该系统上运行的基础规则。
- Itanium C++ ABI是针对C语言特性的专用ABI,它并非独立于System V ABI,而是基于System V ABI的扩展。它补充了C独有的规则:比如类的内存布局、虚函数表结构、名字修饰(mangling)规则、异常处理机制、RTTI的实现规范等。简单来说,System V ABI负责C代码的“底层运行基础”,Itanium C ABI负责C++特有的“面向对象、泛型等高级特性的实现规则”。
x86-64 Linux上编译的C++二进制兼容性
在x86-64架构的Linux机器上,用GNU C编译器(g)生成的二进制同时符合这两种ABI:
- 底层的函数调用、寄存器使用、栈帧等遵循System V x86-64 ABI的规范,保证和系统其他组件(比如C语言编译的库、系统内核)的兼容性;
- C特有的部分(比如类对象布局、虚函数调用、异常抛出捕获)遵循Itanium C ABI的规范,保证不同编译单元(甚至不同版本的GCC)编译的C++代码之间的兼容性。
内容的提问来源于stack exchange,提问作者chinmaymhatre91
相关产品推荐
相关产品推荐

