【发布时间】:2018-11-22 23:19:07
【问题描述】:
我在 RHEL6 和 RHEL7 上安装了 gcc 5.2.1,看起来 _GLIBCXX_USE_CXX11_ABI 被禁用了。即使我手动运行-D_GLIBCXX_USE_CXX11_ABI=1 -std=c++14,它也不起作用。这意味着我不会获得小字符串优化功能。例如,以下代码的输出总是有 8 和 'micro not set'。对于 SSO,如果我们查看 code bits/basic_string.h,std::string 的大小应该至少为 16。有什么解决方法吗?
#include <string>
#include <iostream>
int main()
{
std::cout << sizeof(std::string) << std::endl;
#if _GLIBCXX_USE_CXX11_ABI
std::cout << "macro set" << std::endl;
#else
std::cout << "macro not set" << std::endl;
#endif
}
【问题讨论】:
-
定义“不按预期工作”?请注意,
1是该宏的默认值。 -
你的 GCC 是从哪里安装的?
-
Gcc 是坚定的。假设它是 RHEL 发行版的一部分?
-
您使用的是不支持新 ABI 的 devtoolset 版本的 GCC。我将更改问题上的标签以说明这一点,因为这就是您看到的行为的原因。
标签: c++ libstdc++ rhel7 rhel6 devtoolset