我的目标是在 Centos 7 上使用 gcc 7.2(和 clang 6)构建与 Centos 7 目标兼容的可执行文件,而无需安装 devtoolset,但 * 使用较新的 C++ ABI *。
较新的 ABI 修复了库中的几个缺陷,如果不更改 ABI 就无法修复这些缺陷。例如 list::size O(1) Vs O(n),字符串没有 COW。
我推测了为什么在以下问题中这不可能的答案。 -D_GLIBCXX_USE_CXX11_ABI=1 ineffective for devtoolset-7 on CentOS 7
最佳答案
这似乎与您链接到的问题重复,我看不出有任何理由将两者都打开。
Can I use the new C++ 11 ABI with devtoolset-7 on Centos/RHEL?
没有。 cxx11
ABI 影响 libstdc++.so
的许多内部事物(特别是语言环境方面),devtoolset 混合链接模型不支持这些事物。初始化语言环境的相关函数已经存在于系统libstdc++.so
中,无法被devtoolset的libstdc++_nonshared.a
替代。因此(并避免我们不想影响 RHEL/CentOS 用户的其他潜在 ABI 不匹配)我们在 devtoolset 中禁用了新的 ABI(如 the answer to the other question 中正确所述)。
如果你真的需要新的 cxx11
ABI,你需要构建你自己的 GCC 7,它使用正常的动态链接到它自己的 libstdc++.so
(而不是devtoolset 使用的混合链接模型),然后确保在运行时使用新的 libstdc++.so(请参阅手册中的 Finding Dynamic or Shared Libraries)。
关于c++ - (如何)我可以在 Centos/RHEL 上使用新的 C++ 11 ABI 和 devtoolset-7 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49393888/