在当前的 Linux 发行版上打包 C++11 软件是否安全?

Is it safe to package C++11 software on current Linux distributions?

本文关键字:C++11 软件 是否 安全 Linux      更新时间:2023-10-16

作为 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本身不会带来任何额外的风险。