g2o_viewer 运行 Segmentation fault

在运行g2o_viewer ***.g2o时,报错Segmentation fault (core dumped)

写在前面

当时搜索到了两种解决方案,方案一比较主流,我的Qt版本是5.2.1之前装系统时也有了Qt 4所以感觉方案一应该是正解就先使用了方案一;
之后在解决问题的途径中又发现自己也符合方案二中的问题,且方案一走完后依旧报错,所以又使用了方案二,这样之后,问题解决,g2o_viewer终于可以运行,现记录如下。

原因一:

链接 https://github.com/RainerKuemmerle/g2o/issues/151 中说了是因为在 Ubuntu 14.04 下使用的是 Qt4,而当前的 g2o 版本使用的是 Qt5,所以 g2o_viewer 链接了 Qt 两个版本的动态链接库。
所以解决方案是找到原来使用 Qt4 的 g2o 源码进行编译安装。

过程一:

1.卸载之前的 g2o 版本

sudo rm -rf /usr/local/include/g2o
cd /usr/local/lib
sudo rm -rf libg2o_*

2.下载 Qt4 的 g2o 源码
https://codeload.github.com/RainerKuemmerle/g2o/zip/dbfea7aade1b808b4a7625175aa0dec54931a949

3.进入解压后的安装文件包(注意:路径下不能含中文,否则make中间可能报错!),编译安装

cd g2o
mkdir build&&cd build
cmake ..
make
sudo make install

*4.更改编辑器默认链接使用库时的路径(我使用QT手动写链接路径的话好像是用不到,不过跟的教程中这么写,我也就这么做了一遍)
原因:在默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件。通过源码包进行安装时,如果不指定–prefix(程序存放路径)会将库安装在/usr/local目录下。

sudo gedit /etc/ld.so.conf.d/g2o.config

在弹出的文件窗口输入

/usr/local/lib

含义为:在/etc/ld.so.conf.d/目录下添加一个g2o.config文件,把/usr/local/lib这个路径复制进去。
然后执行下方语句,更新动态链接库就可以了

sudo ldconfig

参考:
https://yq.aliyun.com/wenji/275878
https://blog.csdn.net/qq_36417644/article/details/81174160

原因二(事实证明,该为最正解):

自己ROS系统中装了libg2o,电脑上装的东西多了就很容引起版本或者依赖问题

过程二:

1.卸载

sudo apt-get remove ros-indigo-libg2o

2.重新执行

g2o_viewer result_after.g2o

注意:
既然把ROS下的libg2o卸载了自然会埋下问题的种子【我参考的这位博主是安装了lsd_slam,需要libg2o包】,导致其卸载后编译lsd_slam会出错,所以用lsd_slam的时候再

sudo apt-get install ros-indigo-libg2o

然后重新回到lsd_slam的工作空间执行

catkin_make

参考:https://blog.csdn.net/LOVE1055259415/article/details/79918481

猜你喜欢

转载自blog.csdn.net/qq_40313712/article/details/86617176