注意
本文档适用于 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::string
和std::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. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.