QT编译出现动态链接库undefined reference t
编译时出现的问题
-
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,用命令行
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 t
本文链接:https://www.haomeiwen.com/subject/lybxlqtx.html
网友评论