我使用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'发布于 2015-10-28 15:44:03
你有可能在用GCC 5吗?
如果您收到关于涉及std::__cxx11命名空间中类型或标记abi:cxx11 11的符号的未定义引用的链接器错误,那么它可能表明您试图将使用_GLIBCXX_USE_CXX11_ABI宏不同值编译的对象文件链接到一起。这种情况通常发生在链接到第三方库时,后者是用较旧版本的GCC编译的。如果第三方库不能用新的ABI重新构建,那么您就需要用旧的ABI重新编译代码。
在之前定义以下宏(包括任何标准库头)应该可以解决您的问题:#define _GLIBCXX_USE_CXX11_ABI 0
发布于 2016-05-27 08:12:10
如果可以重新编译所使用的所有不兼容的库,请使用编译器选项进行编译。
-D_GLIBCXX_USE_CXX11_ABI=1
然后重建你的项目。如果不能这样做,请添加到项目的makefile编译器选项中
-D_GLIBCXX_USE_CXX11_ABI=0
定义
#定义_GLIBCXX_USE_CXX11_ABI 0/1
也很好,但是您可能需要将它添加到所有文件中,而编译器选项则需要一次对所有文件执行它。
发布于 2019-07-30 10:11:54
当我遇到类似的问题时,发生了类似的情况,因为我的库是使用clang++构建的,并且默认情况下它会链接到我的系统上的libstdc++.so。而应用程序二进制是使用clang构建的,并与-lc++选项链接。
检查依赖项的最简单方法是执行ldd libName.so
要修复它,您应该在应用程序和库中使用相同的库。
clang++构建库,用clang++编译应用程序。两个步骤都没有额外的链接选项。将使用默认的stdlib。-stdlib=c++构建库,用-lc++编译应用程序。在这种情况下,库和应用程序都将使用libc++.so。-lstdc++。在这种情况下,库和应用程序都将使用libstdc++.so。https://stackoverflow.com/questions/33394934
复制相似问题