11

我的目标是在 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 对 CentOS 7 上的 devtoolset-7 无效

4

1 回答 1

7

这似乎与您链接的问题重复,我认为没有任何理由保持两者开放。

我可以在 Centos/RHEL 上使用新的 C++11 ABI 和 devtoolset-7 吗?

不会。ABI会影响devtoolset 混合链接模型无法支持cxx11的许多内部事物(特别是语言环境方面)。libstdc++.so初始化语言环境的相关函数已经存在于系统libstdc++.so中,不能被 devtoolset 的libstdc++_nonshared.a. 正因为如此(并且为了避免我们不想影响 RHEL/CentOS 用户的其他潜在 ABI 不匹配),我们在 devtoolset 中禁用了新的 ABI(如另一个问题的答案中正确说明的那样)。

如果你真的需要新的cxx11ABI,你需要构建自己的 GCC 7,它使用正常的动态链接到它自己的libstdc++.so(而不是 devtoolset 使用的混合链接模型),然后确保在运行时使用新的 libstdc++.so(参见在手册中查找动态或共享库)。

于 2018-10-02T15:27:37.983 回答