Jos*_*ero 17 c++ packaging software-distribution abi c++11
作为Linux发行版中的下游维护者,我通常维护的一些软件包开始在其代码库中使用C++ 11特性.所有这些都依赖于Linux发行版打包的不同库.
将C++ 11代码与C++ 98和AFAIK混合时,可能会出现ABI问题,当编译软件生成包时,大多数当前主要的Linux发行版都默认不启用C++ 11标志.
问题是:主要的Linux发行版如何处理C++ 11代码的输入?在使用系统库时,是否有一种可靠的方法来检查或避免ABI的这些问题?
谢谢.
该问题与 C++11 与 C++98 无关,只是 C++11 可以激发二进制更改。由 C++11 驱动的二进制更改没有什么特别的。它们与常规二进制更改一样具有破坏性或非破坏性。此外,只有当库维护者专门选择更改其二进制接口时,它们才会更改。
换句话说,这与标准版本无关,而与库有关,除非库明确选择为不同的标准版本提供两个不同的二进制接口(这仍然是库的选择)。除了这种情况之外,您在 C++98 中的情况与在 C++11 中的情况一样。Itanium 在支持 C++11 的版本和支持 C++98 的版本之间向后兼容,因此编译器 ABI 不会被破坏。
从我的记忆中,除非你使用的是 4.7.0,他们为了好玩而破坏了然后又恢复了,否则你使用 libstdc++ 相当安全 - 他们正在为将来的版本存储 ABI 破坏,以便他们可以做出重大突破。
换句话说,虽然向 C++11 的过渡期可能会引入额外的动机来破坏 ABI,从而带来额外的风险,但实际上使用C++11 本身并不会引入任何额外的风险。
| 归档时间: |
|
| 查看次数: |
395 次 |
| 最近记录: |