gcc链接库碰到错误:std::__cxx11::basic_string, std::allocator > const&)’未定义的引用

新装了一台ubuntu服务器,将原先centos下的编译环境配置了一份,编译时出现如下错误:

std::__cxx11::basic_string, std::allocator > const&)’未定义的引用

发现是由于CentOS的gcc版本和ubuntu的gcc版本不一致造成,安装的ubuntu带的gcc5.x版,stl的名称有变化造成

原因
  gcc5以及以后的版本,将std::string和std::list重写,std::list变为std::__cxx11::list,std::string在c++03库是std::basic_string,而在c++11中变为了std::__cxx11::basic_string。而为了在编译的时候兼容旧版本(链接阶段),可在编译的时候启动_GLIBCXX_USE_CXX11_ABI 宏指定具体链接的库。

解决方法
使用_GLIBCXX_USE_CXX11_ABI编译宏
-D_GLIBCXX_USE_CXX11_ABI=0 // 链接到旧版本,未启用c++11特性,std::string是std::basic_string,如将c++11下的string当作参数传入非c++11库,就会出现error: cannot convert ‘const std::__cxx11::basic_string‘ to ‘const char*’,或者未定义的方法引用(undefined reference)
-D_GLIBCXX_USE_CXX11_ABI=1 // 链接到新版本

Popularity: 1% [?]

Random Posts

Comments

Comments are closed.