QT编译出现动态链接库undefined reference t
2018-12-25 本文已影响0人
tsslisimin
编译时出现的问题
- liboctomap.so: undefined reference to `std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char>, std::allocator<char> >(std::basic_istream<char, std::char_traits<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)@GLIBCXX_3.4.21'
- liboctomap.so: undefined reference to `std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_stringstream()@GLIBCXX_3.4.21'
- undefined reference to `vtable for std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >@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版本重新编译。