首页 > 解决方案 > 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 能顺利处理这个问题,不管你设置还是不设置这个标志?

标签: c++linuxgcc

解决方案


来自双 ABI故障排除

如果您收到有关对涉及 std::__cxx11 命名空间或标记 [abi:cxx11] 中的类型的符号的未定义引用的链接器错误,则可能表明您正在尝试将使用不同值编译的目标文件链接在一起 _GLIBCXX_USE_CXX11_ABI宏。当链接到使用旧版本 GCC 编译的第三方库时,通常会发生这种情况。如果第三方库不能用新的 ABI 重建,那么你需要用旧的 ABI 重新编译你的代码。

您必须重新编译整个项目和库。


推荐阅读