将std :: __ cxx11 :: string转换为std :: string

我使用c + + 11,但也有一些没有configuration它的库,需要一些types转换。 特别是我需要一种方法来将std::__cxx11::string转换为常规的std::string ,但是使用谷歌search我找不到一个方法来做到这一点,把(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' 

你有可能使用GCC 5吗?

如果你得到的链接器错误是关于涉及std :: __ cxx11命名空间或标签[abi:cxx11]中的types的符号的未定义引用,那么它可能表明你正试图链接使用_GLIBCXX_USE_CXX11_ABI不同值编译的目标文件macros。 链接到使用旧版GCC编译的第三方库时,通常会发生这种情况。 如果第三方库不能用新的ABI重build,那么你将需要用旧的ABI重新编译你的代码。

来源: GCC 5发行说明/ Dual ABI

包含任何标准库头之前定义下面的macros应该可以解决你的问题: #define _GLIBCXX_USE_CXX11_ABI 0

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

-D_GLIBCXX_USE_CXX11_ABI = 1

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

-D_GLIBCXX_USE_CXX11_ABI = 0

定义

#define _GLIBCXX_USE_CXX11_ABI 0/1

也是不错的,但你可能需要把它添加到所有的文件,而编译器选项一次执行所有的文件。

我得到了这个,我发现解决这个问题的唯一方法就是更新所有的mingw-64(我在msys2上使用pacman进行了更新)。