确认代码中是否有直接使用std::__cxx11::basic_string的情况。通常情况下,你应该使用std::string,编译器会根据C++标准自动处理ABI问题。 如果代码中确实需要使用std::__cxx11::basic_string,确保你的编译器支持C++11,并且已经启用了C++11的支持。 3. 搜索或咨询该错误信息的可能原因 这个错误通常是由于ABI不兼容...
当遇到编译时出现"undefined reference to `std::__cxx11::basic_string" 或者 "@GLIBCXX_3.4.21" 的错误时,通常是由于ABI(应用二进制接口)冲突所致。这一问题常见于编译器版本与本地库编译版本不一致的情况。通过网络搜索,发现解决此类问题的常见方法之一是调整cmakelist文件。尝试调整cmakelist...
编译报错:undefined reference to `std::__cxx11::basic_string 或者@GLIBCXX_3.4.21 寒月残颢 null 6 人赞同了该文章 错误信息大致如上,搜寻网上信息说明是ABI冲突,编译器版本和本地库编译版本不一致(大概是这样吧)。以ABI冲突为关键词搜索网上信息,进行尝试。 尝试方法1:在cmakelist 中添加 : add_definition...
遇到编译报错“undefined reference to `std::__cxx11::basic_string 或者@GLIBCXX_3.4.21”的问题时,搜索网上信息,发现是由于ABI(Application Binary Interface)冲突导致,即编译器版本和本地库编译版本不一致。针对此问题,尝试在cmakelist中添加相关代码,但依然报错,且将宏改为1也无济于事。进...
GCC 5在编译时会将std::string类型按c++11下std::__cxx11::basic_string<char> 来处理,这时如果你调用的库在编译时未启用c++11特性则其中的std::string实际上是std::basic_string<char> ,如果将c++11下的string当作参数传入非c++11的库时,就会出现error: cannot convert 'const std::__cxx11::basic_strin...
网上查资料,两篇文章Undefined reference to google::protobuf::internal::empty_string_[abi:cxx11]和关于编译报错 error: cannot convert 'const std::__cxx11::basic_string<char>' to 'const char*' 的处理分析的很到位。 原因就是我编译使用的是GCC5,而libprotobuf.a使用了非GCC5编译,或者编译时关闭了...
/dahua/lib/: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::append(unsigned long, char)' 原因以及解决方案 当前提供的SDK依赖高版本的GCC编译链接,因此需要升级GCC版本,目前测试可用的版本是5.3.1。
然后看了一下他的基础库的编译,原来他基础库编译的时候使用的是gcc 5.3,但是他使用的gcc版本是7.4,而7.4已经默认使用C++11了,而在C++11下,std::string使用的是std::__cxx11下的,两者ABI不一样。 解决办法 要解决这个问题,只需要在编译的时候添加_GLIBCXX_USE_CXX11_ABI=0宏定义即可。
我使用 c++11,但也有一些没有为其配置的库,需要进行一些类型转换。特别是我需要一种将 std::__cxx11::string 转换为常规 std::string 的方法,但是谷歌搜索我找不到这样做的方法并将 (string) 放在前面工作。
这里发现并没有我们需要的sql::Field::Field(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, sql::field_type, int)方法,而是有一个类似的sql::Field::Field(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >,...