将 std::__cxx11::string 转换为 std::string

新手上路,请多包涵

我使用 c++11,但也有一些没有为其配置的库,需要进行一些类型转换。特别是我需要一种将 std::__cxx11::string 转换为常规 std::string 的方法,但是谷歌搜索我找不到这样做的方法并将 (string) 放在前面工作。

如果我不转换,我会收到如下链接器错误:

 undefined reference to `H5::CompType::insertMember(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long, H5::DataType const&) const'

原文由 jorgen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.9k
2 个回答

您是否有可能使用 GCC 5?

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

资料来源: GCC 5 发行说明/双 ABI

在包含任何标准库头文件 之前 定义以下宏应该可以解决您的问题: #define _GLIBCXX_USE_CXX11_ABI 0

原文由 Brandlingo 发布,翻译遵循 CC BY-SA 3.0 许可协议

我遇到过类似的问题

事实证明,我的项目使用的是 gcc 7 和 g++ 9,并试图将这两个编译的目标文件链接在一起,结果一切都搞砸了。

确保在所有项目中使用相同的编译器版本。

原文由 Ohad Cohen 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题