做SLAM实验时g2o的安装问题cmake的版本问题及git下载历史版本代码方法总结

博主之前跑了ORBSLAM2做了相关实验,半年没碰之后,又重新来弄发现,WTF,g2o用不了??cmake版本过低无法编译??直接修改CMakeLists.txt文件还不行??

好吧,我屈服了,升级cmake吧。。。升级到了3.2爽歪歪腰不酸了腿也利索了。。。

注意:之前没搞清楚g2o的版本,用了最新版,事实证明,你只需要找到对应的老版本的g2o,下载安装,并不需要更新cmake的版本,更新cmake版本后会带来哪些影响,这个还没有验证过。不过可以降级回去(以后用的时候出现问题再说吧,感觉也没什么问题,一般是最低版本要求,高版本也没有什么负面影响)

怎么优雅的升级cmake请参考我的上一篇博客https://blog.csdn.net/love1055259415/article/details/79875113

好了,现在我们来说说g2o的问题。

cd g2o

mkdir build

cd build

cmake..

make

sudo make install


想着,这下应该可以了把,结果是未找到文件

g2o_viewer 无法链接到 libqglviewer.so

原因:

在默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,通过源码包进行安装时,如果不指定--prefix会将库安装在/usr/local目录下,而又没有在文件/etc/ld.so.conf中添加 /usr/local/lib这个目录。这样虽然安装了源码包,但是使用时仍然找不到相关的.so库,就会报错。也就是说系统不知道安装了源码包。

解决方法是在/etc/ld.so.conf.d/里新建g2o.config文件,在其中添加绝对路径/usr/local/lib;【在文件/etc/ld.so.conf中添加 /usr/local/lib这个目录也是可以的】

sudo gedit /etc/ld.so.conf.d/g2o.config
即在/etc/ld.so.conf.d/目录下添加一个g2o.config文件,把/usr/local/lib复制进去。然后,sudo ldconfig,就可以了。

因为博主在做这个实验https://www.cnblogs.com/gaoxiang12/p/5041142.html,所以,接下来再次回到octomap_tutor目录下,执行g2o_viewer data/result_after.g2o


什么??居然Segmentation fault (core dumped)。。。。

g2o_viewer 运行 Segmentation fault

运行 g2o_viewer 会报错Segmentation fault (core dumped),Google 找了很多都没有解决问题。最后还是回到 Github 这个 repo 的 issues 才找到答案。

链接 https://github.com/RainerKuemmerle/g2o/issues/151 中说了是因为在 Ubuntu 14.04 下使用的是 Qt4,而当前的 g2o 版本使用的是 Qt5,所以 g2o_viewer 链接了 Qt 两个版本的动态链接库。

所以解决方案是找到原来使用 Qt4 的 g2o 源码进行编译安装。

看链接 https://github.com/RainerKuemmerle/g2o/commits/master 知道在2017年1月13日有一个 commit 是“Switch to Qt5”,所以 git checkout 到之前版本就可以直接正常编译安装。

如何使用git checkout下载历史版本的代码

git上一个项目,都是经过多次迭代产生的,过程从简单到复杂,那么,想要用好git,也不能仅仅局限于自己的版本管理,你很可能需要去看懂别人的代码,这个时候就需要用到下载历史版本了,这个过程中,你能够看到很多别人实现功能的一个思路。

一个小贴士:善用git的搜索功能哟

1、首先找到g2o的位置:https://github.com/RainerKuemmerle/g2o

git clone 下载源码:git clone https://github.com/RainerKuemmerle/g2o.git 

2、点击905commits


3、然后就看到历史版本

4、下载历史版本代码,使用git checkout命令,找到你想要的历史版本的提交时间及位置

注意到在2017.1.13日提交的版放弃了对qt4的支持,所以下载之前的版本

dbfea7aade1b808b4a7625175aa0dec54931a949
dbfea7aade1b808b4a7625175aa0dec54931a949

5、复制SHA(右边的带箭头的标志点一下)

6、git checkout -b  dbfea7aade1b808b4a7625175aa0dec54931a949

或者可以通过git log查看历史修改的SHA,找到对应的SHA,然后git checkout SHA


按q退出

通过git tag查看历史主要修改



dbfea7aade1b808b4a7625175aa0dec54931adbfea7aade1b808b4a7625175aa0dec54931a949
dbfea7aade1b808b4a7625175aa0dec54931a949
<刚复制的SHA>

然后查看你的文件夹,已经更改为历史版本了

删除之前编译过安装过的版本

(1)删除/usr/local/include/g2o,指令为sudo rm -rf /usr/local/include/g2o

(2)删除/usr/local/lib下有关libg2o_*.so的库文件,先进入目录cd /usr/local/lib,然后挨个(可多个同时)删除sudo rm -rf libg2o_*

编译下载的历史版本

回到之前的下载的g2o文件夹:

cd g2o

mkdir build&&cd build

cmake ..

make

sudo make install

接下来,sudo gedit /etc/ld.so.conf.d/g2o.config

即在/etc/ld.so.conf.d/目录下添加一个g2o.config文件,把/usr/local/lib复制进去。

然后,sudo ldconfig更新动态链接库,就可以了。

执行g2o_viewer查看是否正常启动


大功告成!!!


参考链接:以下链接可能解决你的问题

一起做的解决g2o的问题:https://www.cnblogs.com/gaoxiang12/p/4770813.html    

git checkout:https://segmentfault.com/a/1190000010771974

g2o core dumped:https://blog.csdn.net/u011306452/article/details/54943956



*************************************我是萌萌哒分割线******************************************


今天在用的时候发现,还是出现段错误的情况。不能加载g2o文件。重新在高翔的github上下载了g2o版本https://github.com/gaoxiang12/rgbd-slam-tutorial-gx

make时候出现错误

解决办法为:

libqglviewer 安装
http://libqglviewer.com/installUnix.html

我之前不是装过这个吗?怎么。。仔细检查一下

由于libqglviewer库与编译源文件不匹配,好吧,参考libqglviewer http://libqglviewer.com/installUnix.html安装一下吧。

最后出现的问题是

error: No rule to make target libqglviewer.so

No rule to make target /usr/lib/libqglviewer.so, needed by ../lib/libg2o_viewer.so
到这里下载g2o,里面一个是我编译好的一个是源码包,可以用源码包来安装,下载地址https://download.csdn.net/download/love1055259415/10339455

cd g2o

mkdir build

cd build

cmake ..

make


sudo make install


参考链接

https://blog.csdn.net/yangziluomu/article/details/72622225



  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值