在当前的 Linux 发行版上打包 C++11 软件是否安全?
Is it safe to package C++11 software on current Linux distributions?
作为 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本身不会带来任何额外的风险。
相关文章:
- MSVC是否支持C++11样式的属性而不是__declspec
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 如何将模板转换为C++11之前的模板
- c++11评估顺序(未定义的行为)
- C++中的VLA,扩展名为std=C++11
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- "类模板示例<int>;"语句对 C++11 是什么意思?
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 如何使用lock_guard在c++11中实现scoped_lock功能
- C++11 中不同类型的对象的 std::array 的替代方案
- 为什么 -mmacosx-version-min=10.10 不阻止使用标记为从 10.11 开始的函数?
- 为什么我的C++代码中出现'Segmentation Fault: 11'行?
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 别名模板的专业化 C++11 中没有开销的最佳替代方案
- STLPort using C++11
- Qt 5.11.2 (Clang 8.0 (Apple), 64 位), 找不到 QJSEngine 文件
- 在 C++11 中,如何查找并返回以给定字符串开头的字符串向量中的所有项?
- 在当前的 Linux 发行版上打包 C++11 软件是否安全?