string - 将 c++11:: __cxx11:: 字符串转换为 std::string

我使用c 11,需要一些类型转换,特别是需要将std::__cxx11::string转换为常规std::string,但是我google了老半天,找不到方法。

如果我不转换,将得到如下所示的链接器错误:


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'



时间:

有没有可能使用GCC 5?

如果收到链接器错误,这些错误涉及std::__cxx11命名空间或标记中的类型的符号引用[abi:cxx11型],然后它表示你正试图将使用不同值编译的对象文件链接到一起,这些文件是为_GLIBCXX_USE_CXX11_ABI宏编译的,这通常发生在链接到使用旧版本的GCC编译的第三方库时,如果不能使用新的ABI重新构建第三方库,那么你需要用旧的ABI重新编译代码。

源:GCC 5Release Notes/Dual ABI

在包含标准库头之前,定义以下宏应该可以解决你的问题:#define _GLIBCXX_USE_CXX11_ABI 0

如果可以重新编译使用的所有不兼容的库,请使用编译器选项

-D_GLIBCXX_USE_CXX11_ABI =1

然后重新生成项目。如果不能这样做,请添加到项目的makefile编译器选项

-D_GLIBCXX_USE_CXX11_ABI =0

这个定义

#define _GLIBCXX_USE_CXX11_ABI 0/1

也不错。但如果需要将它添加到所有文件中,可以用这个编译器选项,同时将它添加到所有文件中。

我发现修复它的唯一方法是更新mingw-64 (我用pacman在msys2上)。

...