c++ - c++ 项目仍然需要 -D_GLIBCXX_USE_CXX11_ABI=0
问题描述
当我公司将我们的 gcc 升级到 6.3 时,所有 c++ 项目都添加了 -D_GLIBCXX_USE_CXX11_ABI=0 以解决 gcc 中的 ABI 损坏问题。现在我们的 gcc 是 8.2,那个标志还在项目文件中。由于项目文件太多,因此不会很快删除。我需要构建一个将由这些应用程序项目链接的第三方库。我知道出于一致性的原因,我最好使用相同的标志。但我想知道如果我不使用它,我会遇到 c++ 字符串的任何奇怪行为吗?gcc 8.2 能顺利处理这个问题,不管你设置还是不设置这个标志?
解决方案
来自双 ABI故障排除
如果您收到有关对涉及 std::__cxx11 命名空间或标记 [abi:cxx11] 中的类型的符号的未定义引用的链接器错误,则可能表明您正在尝试将使用不同值编译的目标文件链接在一起 _GLIBCXX_USE_CXX11_ABI宏。当链接到使用旧版本 GCC 编译的第三方库时,通常会发生这种情况。如果第三方库不能用新的 ABI 重建,那么你需要用旧的 ABI 重新编译你的代码。
您必须重新编译整个项目和库。
推荐阅读
- laravel - laravel htaccess force www
- text-editor - 取消注释缩进的代码块时的奇怪行为
- c++ - 为什么我不能调用 onFire();
- typescript - VSC 在 monorepo 中找不到包(找不到名称 [包])
- python - 如何在 python-attrs 类中忽略额外的 kwargs
- linux - 使用 ss 检查打开的端口
- ruby-on-rails - 数组中的 collection_radio_buttons
- excel - 创建数据透视到总和后,有没有办法对数据透视图最小值、最大值和平均值进行透视?
- c# - NHibernate:如何使用带有本机 SQL 的 CreateSQLQuery 返回标量值?
- r - 在数据框列表中,计算满足条件的数据框的比例