视觉slam十四讲ch12 pcl库安装,以及运行程序报错

1.重要的事情说三遍

别用autoremove,别用autoremove,别用autoremove,如果你看到某篇博客写了要你卸载什么,重装什么,千万别用autoremove就行,具体原因百度会告诉你答案。我就是按照一篇博客里写的删除qt5用autorempve然后删除了很多重要的东西的,现在很后悔。。。

2.安装步骤主要参照这两篇博客:

https://blog.youkuaiyun.com/weixin_41070687/article/details/102841946

https://blog.youkuaiyun.com/lilywri823/article/details/86583269

3.问题:

make的时候出现如下错误:

/usr/lib/x86_64-linux-gnu/libSM.so: undefined reference to `uuid_generate@UUID_1.0'
/usr/lib/x86_64-linux-gnu/libSM.so: undefined reference to `uuid_unparse_lower@UUID_1.0'
collect2: error: ld returned 1 exit status
outofcore/tools/CMakeFiles/pcl_outofcore_viewer.dir/build.make:373: recipe for target 'bin/pcl_outofcore_viewer' failed
make[2]: *** [bin/pcl_outofcore_viewer] Error 1
CMakeFiles/Makefile2:1425: recipe for target 'outofcore/tools/CMakeFiles/pcl_outofcore_viewer.dir/all' failed
make[1]: *** [outofcore/tools/CMakeFiles/pcl_outofcore_viewer.dir/all] Error 2
Makefile:149: recipe for target 'all' failed
make: *** [all] Error 2

百度到了这篇博客:

https://www.cnblogs.com/BambooEatPanda/p/10682670.html

里面提到了这个链接:

https://stackoverflow.com/questions/45584275/getting-error-usr-lib-lib64-libsm-so-undefined-reference-to-uuid-unparse-l

我搜索过:libSM.so本身在计算机中。解决方案是从路径中删除anaconda lib文件夹,然后重新构建。具体步骤如下:

1.在你build的文件夹打开终端:

echo $PATH

我得到的输出是这样的:里面记录了path的路径:

/home/alexander/anaconda3/bin:/home/alexander/anaconda3/condabin:/opt/ros/kinetic/bin:/home/alexander/bin:/home/alexander/.local/bin:/root/anaconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

2.

删除里面所有和anaconda有关的路径,重新定义path:

PATH=/opt/ros/kinetic/bin:/home/alexander/bin:/home/alexander/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

3.查看修改结果:

echo $PATH
/opt/ros/kinetic/bin:/home/alexander/bin:/home/alexander/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

修改成功。

4.继续重新创建build文件夹,重新make。

5.在终端修改的好处是不会永久修改path,当你下次打开终端时,环境变量又变回之前没有修改的亚子。毕竟anaconda还是要用的嘛。

4.很不幸,结果依旧失败了。。最后选择了以下博客提供的终极解决方案:

博客写到原因可能是:undefined reference,本身是一个c++编译常见错误undefined reference to错误的解决方法中写到:

  1. 1. 另外注意一个问题,就是只要查找到第一个就会返回,后面的不会再查找. 
    2. 比如-L./A -L./B -lx 在A中有libx.a B中有libx.a和libx.so,
    3. 这个时候会使用在./A的libx.a 而不会遵循动态库优先的原则,
    4. 因为./A是先找到的,并且没有同名动态库存在
    

    虽然我已经从path中剔除了与anaconda相关的路径,但不知为何系统依旧会优先筛选anaconda。总之,把anaconda2/lib下的libuuid库文件移走就好了:

  2. ls ~/anaconda3/lib/libuuid*
    
  3. mkdir ~/anaconda3/libuuid
    
  4. mv ~/anaconda3/lib/libuuid* ~/anaconda3/libuuid
    

    终于迈过了这道坎,最后记得把文件再移回来。感谢这个博客的作者:

    https://blog.youkuaiyun.com/u014734886/article/details/93029349

5.到81%左右又出现了如下问题:

/home/alexander/anaconda3/lib/libpng16.so.16: undefined reference to `inflateValidate@ZLIB_1.2.9'
collect2: error: ld returned 1 exit status
apps/CMakeFiles/pcl_pcd_video_player.dir/build.make:229: recipe for target 'bin/pcl_pcd_video_player' failed
make[2]: *** [bin/pcl_pcd_video_player] Error 1
CMakeFiles/Makefile2:8613: recipe for target 'apps/CMakeFiles/pcl_pcd_video_player.dir/all' failed
make[1]: *** [apps/CMakeFiles/pcl_pcd_video_player.dir/all] Error 2
Makefile:149: recipe for target 'all' failed
make: *** [all] Error 2

搜索了很久都没有找到解决方案,最后依旧用上述方法暴力破解了。

总结就是:anaconda环境很坑,很多包其实在原系统中安装就都不会报错。以后在遇到这种问题,首先考虑anaconda的原因!

6.运行程序pointcloud_mapping时报错:

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

参照此博客作了修改:

https://blog.youkuaiyun.com/luanfei3717/article/details/80268597?utm_source=blogxgwz6

1.加上头文件include<Eigen/StdVector>

2.将所有std::vectorEigen::?? 都改为std::vector<Eigen::??,Eigen::aligned_allocatorEigen::??>(不是真的问号,根据变量类型而定)

修改后成功!感谢老哥

6.运行程序surfel_mapping时报错:

terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string::_M_construct null not valid

Process finished with exit code 134 (interrupted by signal 6: SIGABRT)

蠢了,这次的原因是.pcd文件路径没有找对。在configure里设置路径就OK了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值