QT编译出现动态链接库undefined reference to `std::@GLIBCXX_3.4.21'

编译时出现的问题

  • liboctomap.so: undefined reference to `std::basic_istream >& std::operator>>, std::allocator >(std::basic_istream >&, std::__cxx11::basic_string, std::allocator >&)@GLIBCXX_3.4.21'
  • liboctomap.so: undefined reference to `std::__cxx11::basic_stringstream, std::allocator >::~basic_stringstream()@GLIBCXX_3.4.21'
  • undefined reference to `vtable for std::__cxx11::basic_stringstream, std::allocator >@GLIBCXX_3.4.21'

问题的原因

  • 系统没有找到GLIBCXX3.4.21库

解决方法

  • 首先查看系统是否有GLIBCXX3.4.21,用命令行 sudo find / -name libstdc++.so.* 找出该文件的路径
  • 再用 strings /usr/lib/libstdc++.so.6 | grep GLIBCXX /usr/lib换成你找出来的路径:
  • GLIBCXX_3.4
    GLIBCXX_3.4.1
    GLIBCXX_3.4.2
    GLIBCXX_3.4.3
    GLIBCXX_3.4.4
    GLIBCXX_3.4.5
    GLIBCXX_3.4.6
    GLIBCXX_3.4.7
    GLIBCXX_3.4.8
    GLIBCXX_3.4.9
    GLIBCXX_3.4.10
    GLIBCXX_3.4.11
    GLIBCXX_3.4.12
    GLIBCXX_3.4.13
    GLIBCXX_3.4.14
    GLIBCXX_3.4.15
    GLIBCXX_3.4.16
    GLIBCXX_3.4.17
    GLIBCXX_3.4.18
    GLIBCXX_3.4.19
    GLIBCXX_3.4.20
    GLIBCXX_3.4.21
    GLIBCXX_3.4.22
    GLIBCXX_3.4.23
    GLIBCXX_3.4.24
    GLIBCXX_3.4.25
    GLIBCXX_DEBUG_MESSAGE_LENGTH
  • 之前我的电脑上面没有GLIBCXX_3.4.21这个库,我更新到gcc5版本之后才有的,之前用的是gcc3。
  • 更新之后 GLIBCXX_3.4.21库有了,编译还是出一样的错误。
  • 原因是因为octomap是用我之前的gcc3版本编译的,所以编译出来的动态链接库so文件和gcc3匹配,重新把octomap用gcc5编译, 然后再在QT中链接编译,问题解决。

总结

遇到这个问题时分以下几步:

  • step1:查找当前的gcc版本 gcc --version , 用sudo find / -name libstdc++.so.*找出库。
  • step2:用strings /usr/lib/libstdc++.so.6 | grep GLIBCXX (/usr/lib换成你找出来的路径),查看有没有GLIBCXX_3.4.21库文件,如果没有,升级Gcc版本。
  • step3:把出错的so用新的gcc版本重新编译。

OVER

你可能感兴趣的:(QT编译出现动态链接库undefined reference to `std::@GLIBCXX_3.4.21')