常用C++ ABI与名称修饰(mangling)方案都有哪些?
常见C++ ABI及名称修饰方案说明
你提到的Itanium C++ ABI,确实是GCC、Clang等编译器在Linux、多数类Unix平台、以及Windows MinGW环境下默认采用的C++ ABI标准,其名称修饰规则对应官方文档第5.1节。除此之外常用的C++ ABI及名称修饰方案还有以下几种:
- MSVC C++ ABI:也就是Windows平台专属的微软Visual C++ ABI,是微软为MSVC编译器定制的专属ABI标准,配套有独立的名称修饰规则。
这套规范有公开的官方文档可查,微软已经在Visual Studio官方文档中公开了该ABI的绝大多数规则,包括对象内存布局、虚表结构、异常处理、名称修饰等全部核心内容,还配套了undname.exe命令行工具,可直接解析MSVC修饰后的符号。 - ARM C++ ABI:ARM官方推出的适配ARM指令集的C++ ABI标准,在Itanium C++ ABI基础上做了大量ARM架构专属的适配调整,多用于嵌入式ARM设备、移动端等场景的编译环境。
- IBM XL C++ ABI:IBM为自家Power、Z系列硬件平台的XL C/C++编译器定制的ABI方案,主要用于IBM商用小型机、大型机场景。
- Oracle Solaris C++ ABI:原Sun公司为Solaris系统定制的C++ ABI,现由Oracle维护,仅在Solaris系统的Oracle C++编译器环境下使用。
内容的提问来源于stack exchange,提问作者Andrew Tomazos
相关产品推荐
相关产品推荐

