我使用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'
您是否可能正在使用GCC 5?
如果您收到有关未定义引用的链接器错误,这些符号涉及std :: __ cxx11命名空间或标记[abi:cxx11]中的类型,则可能表明您正在尝试将使用_GLIBCXX_USE_CXX11_ABI的不同值编译的目标文件链接在一起宏 当链接到使用旧版GCC编译的第三方库时,通常会发生这种情况。如果无法使用新的ABI重建第三方库,则需要使用旧的ABI重新编译代码。
资料来源:GCC 5发行说明/双重ABI
在包括任何标准库头之前定义以下宏应该可以解决您的问题:#define _GLIBCXX_USE_CXX11_ABI 0
我试过了 现在我在使用c ++ 11函数的任何地方都遇到链接器错误。也许无法同时使用c ++ 11和已编译的hdf5库。
对我来说,在Ubuntu 14.04上,默认情况下g ++ 6.2编译时将其设置为0,而在16.04上,相同的g ++版本将其设置为1。在14.04上,将其设置为1似乎没有任何作用。生成的目标文件未使用CXX11 ABI。我怀疑这是系统限制。
我不确定为什么要抛出编译器
undefined reference
,在寻找解决方案之前,我检查了程序中的整个链接,却没有找到任何东西。之后,我决定在网上搜索并找到了这个。它像魅力一样工作,谢谢:)