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

2023-10-27

博主之前跑了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



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • MATLAB 中的randn函数

    matlab函数 randn 产生正态分布的随机数或矩阵的函数 randn 产生均值为0 方差 2 1 标准差 1的正态分布的随机数或矩阵的函数 用法 Y randn n 返回一个n n的随机项的矩阵 如果n不是个数量 将返回错误信息 Y
  • ESP8266和腾讯云的使用

    1 ESP8266简介 在乐鑫官网 ESP芯片技术厂家 可以看到 乐鑫把ESP8266称之为面向物联网应用的高性价比 高度集成的 Wi Fi MCU 简单来说 ESP8266可以有两种功能 一是WiFi模块 二是32位MCU WiFi模块
  • 向量与矩阵的相乘

    在学习计算机图形学的时候 最常遇到的就是矩阵的乘法了 下面我们就简单的介绍下 使用程序如何编写两个矩阵的相乘呢 其实这个问题 大一的孩子都会写的 不是很难的 但是呢 为了构建一个完整的学习过程 还是记录一下基础知识 1 向量乘以矩阵 如上图
  • 全栈开发学习(Node+Vue+Mongodb)(八)——移动端页面搭建(主页部分)

    前面我们完成了后台管理界面的基本功能 接下来就需要完成移动端页面的搭建与数据的展示 移动端的搭建主要以旧版王者荣耀官网主页样式为模板 本文主要介绍前端搭建的流程与一些基本组件的使用 1 准备工作 样式 思路 使用SASS规范化我们的所有样式
  • Obsidian同步方案(win+android)

    官方 Obsidian Git Mgit Onedirve Onedrive SyncTrayzor Syncthing Obsidian Git Mgit 步骤 下载 按照俩个教程配置 有问题私聊 几天内回复 注意点 ObsidianGi
  • RLE压缩算法详解

    RLE压缩算法详解 RLE Run Length Encoding 行程长度压缩算法 也称游程长度压缩算法 是最早出现 也是最简单的无损数据压缩算法 RLE算法的基本思路是把数据按照线性序列分成两种情况 一种是连续的重复数据块 另一种是连续
  • 数据挖掘个人理解

    lt 1 gt 数据挖掘 1 通过对大量数据进行分析 从大量数据中发现一些客观规律 结论 2 主要有数据准备 规律寻找 规律表示3大步 3 步骤 采集数据 采集相关技术 整合检查数据 去除错误数据 建立合适模型进行数据分析 进行数据挖掘工作
  • Markdown基础语法详细版

    文章目录 1 Markdown简介 2 Markdown特点 3 Markdown基本语法 3 1 标题 3 2 斜体和粗体 3 3 换行 3 4 分割线 3 5 列表 3 5 1 无序列表 3 5 2 有序列表 3 5 3 定义型列表 3
  • Linux应用编程(文件IO进阶)

    一 Linux 系统如何管理文件 1 1 静态文件与 inode 文件存放在磁盘文件系统中 并且以一种固定的形式进行存放 我们把他们称为静态文件 每一个文件都必须对应一个 inode inode 实质上是一个结构体 这个结构体中有很多的元素
  • 手写个简单的promisify方法

    node中为了能方便使用async await语法 通常会使用promisify方法将node中遵循错误优先的api接口转换 返回一个Promise实例 从而无缝衔接使用async await语法 例如 async function var
  • CGAL点云处理之体素下采样

    体素下采样 点云体素采样 通过指定大小的网格 每个网格保留一个点云数据 void gridSimplifyPointsByCgal Point set points double threshold int size double spac
  • android五种布局局限性,android ConstraintLayout布局从入门到放弃

    布局优化是性能优化的一个方向点 包括了根据需求应该选用哪种布局容器 ViewStub懒加载 如何减少布局层级等 今天我们要探讨的就是如何使用ConstraintLayout来优化我们的布局层级 提出问题 为什么要用这个布局 怎么用这个布局
  • 死锁的预防和解除

    产生死锁的原因主要是 1 系统资源不足 2 进程运行推进的顺序不合适 3 资源分配不当等 如果系统资源充足 进程的资源请求都能够得到满足 死锁出现的可能性就很低 否则就会因争夺有限的资源而陷入死锁 其次 进程运行推进顺序与速度不同 也可能产
  • flutter直接读取服务器文件的内容,flutter 如何实现文件读写(使用篇)

    flutter文件读写可以对磁盘文件进行操作 实现某些业务场景 那么我们开始来讲下这个文件读写操作 使用的库插件 package dart io 用于数据处理 path provider 用于获取路劲 操作步骤 1 获取正确的本地路径 2
  • 【跑实验07】RuntimeError: Argument #6: Padding size should be less than the corresponding input dimension

    最近在尝试跑实验的时候 我们的部分代码为 patch h 28 patch w 28 feat dim 768 transform T Compose T GaussianBlur 9 sigma 0 1 2 0 T Resize patc
  • 暗黑战神学习笔记

    暗黑战神游戏开发游戏学习笔记 第一章 初始场景与UI界面制作 光照系统 有哪些参数可以设置光源 1 点光源 2 window界面下的LightSetting 光照系统的优化方法 Animation系统 第二章 UI逻辑框架与配置文件 第三章
  • 【线性代数】从矩阵分块的角度理解矩阵乘法

    一 矩阵分块法介绍 概念 例 二 使用矩阵分块法计算矩阵的积 1 分块矩阵计算的数学步骤 使用Numpy计算例1 import numpy as np A np mat 1 0 0 0 0 1 0 0 1 2 1 0 1 1 0 1 B n
  • C++智能指针——auto_ptr详解

    前言 从之前智能指针的介绍中可以了解到智能指针主要作用是管理内存 避免内存泄漏和悬垂指针 之前介绍的不管是智能指针与引用计数详解还是智能指针与句柄详解 其核心就是通过一个类来管理被new出来的对象 具体的技术就是靠引用计数 auto ptr
  • Android Studio系列:安装并使用JetBrains Mono字体

    下载jetbrains mono字体 https www jetbrains com lp mono 解压 打开JetBrainsMono 2 242 fonts ttf 全选 然后安装 重启Android studio 一定要重启 然后选
  • 做SLAM实验时g2o的安装问题cmake的版本问题及git下载历史版本代码方法总结

    博主之前跑了ORBSLAM2做了相关实验 半年没碰之后 又重新来弄发现 WTF g2o用不了 cmake版本过低无法编译 直接修改CMakeLists txt文件还不行 好吧 我屈服了 升级cmake吧 升级到了3 2爽歪歪腰不酸了腿也利索