Mar*_*ork 42
脱离我的头顶:
C++特定:
通用.
Lin*_*cer 24
根据我的经验,最大的问题是C++标准库.即使你有一个ABI来决定如何布置类,不同的编译器提供了标准对象的不同实现,如std::string和std::vector.
我并不是说标准化C++库对象的内部布局是不可能的,只是以前没有做过.
我们对标准C++ ABI最接近的是Itanium C++ ABI:
本文档是作为通用规范编写的,可供各种体系结构上的C++>实现使用.但是,它确实包含用于Itanium 64位ABI的特定于处理器的材料,标识为这样."
在GCC文档解释了支持这一ABI对C++的:
从GCC 3.2开始,C++的GCC二进制约定基于一个独立于供应商的书面C++ ABI,它专门针对64位Itanium,但也包括适用于任何平台的通用规范.这个C++ ABI也在某些平台上由其他编译器供应商实现,特别是GNU/Linux和BSD系统
正如@Lindydancer所指出的,您还需要使用相同的C++标准库/运行时.
小智 5
任何语言的ABI标准确实需要来自想要支持这种事物的给定平台.语言标准尤其是C/C++实际上由于许多原因无法做到这一点,但主要是因为这样的事情会使语言不那么灵活,便于携带,因此使用较少.C确实没有定义的ABI,但许多平台(直接或间接)定义了一个.C++没有发生这种情况的原因是因为语言更大并且更频繁地进行更改.但是,Herb Sutter提出了一个非常有趣的建议,即如何获得更多平台来创建标准ABI,以及开发人员如何编写以标准方式使用ABI的代码:
https://isocpp.org/blog/2014/05/n4028
他指出C++如何通过extern"C"链接到平台C ABI而不是C++ ABI的标准方法.我认为这个提议可以在很大程度上允许用C++而不是C语言来定义接口.
| 归档时间: |
|
| 查看次数: |
9210 次 |
| 最近记录: |