注意

本文档适用于 Ceph 开发版本。

C++17和libstdc++ ABI

Ceph在mimic中已切换到C++17。要在没有GCC-7的旧发行版上构建Ceph,需要从附加仓库中安装GCC-7。在RHEL/CentOS上,我们使用devtoolset-7fromSCLs来构建Ceph。但是devtoolset-7始终使用旧的ABI即使_GLIBCXX_USE_CXX11_ABI=1被定义。所以,std::stringstd::list实现仍然被使用。换句话说,std::string仍然使用写时复制,并且std::list::size()在这些发行版上仍然是O(n)。但在Ubuntu Xenial上,Ceph使用新的ABI构建。所以,因为我们仍然在RHEL/CentOS上使用libstdc++和devtoolset来构建软件包,请不要依赖新ABI或旧ABI的行为。

对于那些争论“GCC支持双重ABI!”的人,这里有一个长故事。问题在于系统共享库和libstdc++_nonshared.a模型。

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.