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

标签 c++ c++11 centos7 software-collections devtoolset

我的目标是在 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/

相关文章:

multithreading - 没有匹配函数调用 ‘std::thread::thread(<unresolved overloaded function type>)’

C++11 多线程 : State of thread after execution

ruby-on-rails - Rails 运行程序出现段错误 (Rails 4.0.0 Ruby 2.2.2p95 CentOS7)

c++ - 自定义对象工厂

c++ - 使用解释为函数定义的模板化构造函数的非模板化类的实例?

c++ - 什么时候使用指针成员变量?

c++ - 错误: passing 'const S' as 'this' argument discards qualifiers

php - CentOS 7 安装 pecl/pear ius

linux - 第 8 行 : [: N: integer expression expected

c++ - 在 map C++ 中迭代和使用 find()