GCC 5 ABI 更改

Posted

技术标签:

【中文标题】GCC 5 ABI 更改【英文标题】:GCC 5 ABI change 【发布时间】:2015-02-12 09:26:24 【问题描述】:

Fedora announced 他们可能计划在默认情况下关闭新 ABI 的情况下发布 GCC 5。据我了解,Fedora 22 将继续使用旧 ABI,Fedora 23 将使用新 ABI。程序必须大量重新编译。

我的问题是 C++11 标准从 C++03 发生的哪些改变会破坏 ABI 兼容性?

【问题讨论】:

一个典型的事情是 std::string 没有引用计数并且有小字符串优化。 还有 std::list,现在需要 O(1) size() 无需重新编译程序。仔细阅读公告。 GCC5 and the C++11 ABI@redhat 【参考方案1】:

GCC wiki 上有一个关于 Cxx11 向后 ABI 兼容性的页面:https://gcc.gnu.org/wiki/Cxx11AbiCompatibility

C++98 语言与 C++11 语言的 ABI 兼容,但库中的一些地方破坏了兼容性。这使得将 C++98 对象与 C++11 对象链接起来很危险。

【讨论】:

你能把这个更明确,而不仅仅是链接吗?

以上是关于GCC 5 ABI 更改的主要内容,如果未能解决你的问题,请参考以下文章

如何使用旧 ABI 编译 GCC 5 的 boost?

更改gcc g++版本

带有 abi:cxx11 的 GCC 未定义引用

GCC编译宏_GLIBCXX_USE_CXX11_ABI背景分析和实现原理

GCC编译宏_GLIBCXX_USE_CXX11_ABI背景分析和实现原理

GCC编译宏_GLIBCXX_USE_CXX11_ABI背景分析和实现原理