最近在用CMake编译一个C++的Web框架WT时,遇到类似如下报错:
undefined reference to `__cxx11_std::__detail::_List_node_base::_M_hook(std::__detail::_List_node_base*)@GLIBCXX_3.4.21'
undefined reference to `__cxx11_std::__detail::_List_node_base::_M_unhook()@GLIBCXX_3.4.21‘
undefined reference to `__cxx11_std::__detail::_List_node_base::_M_transfer(std::__detail::_List_node_base*, std::__detail::_List_node_base*)@GLIBCXX_3.4.21'
In function `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)':
: undefined reference to `__cxx11_boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)'
collect2: ld returned 1 exit status
按照网上的做法:升级glibc++库,重新做好软连接,之后还是不行,最终发现问题:
1、我的Gcc之前用的是CentOS自带的版本,我升级成了支持C++11的Gcc5.1;
2、虽然用gcc -v显示的版本没问题,但是没有把之前的Gcc4.3清除干净;
3、安装Cmake和boost1.58时,可能系统自动使用了不同的gcc版本;
把老版本的Gcc4.3完全干掉后,重装Cmake和boost,编译通过。