提示!!!!!

文章前面摸索较长,可转文末 bug解决

遇到BUG

make 直接报错


在这里插入图片描述

搜索相关贴子,初步判断是由g2o版本不一致,导致的指针问题,我这个好像是安装了旧版本,需要更新到新版本,才能使用智能指针.

关于解决方案可以参考该帖子于g2o新版本编译出错的原因及解决办法,不过这个帖子好像是要用旧版本替换新版本,SLAMbook2思路相反.

ubuntu卸载g2o库
最后,可以输入locate g2o

命令来验证是否删除干净。

在安装g2o库时,又报cmake 版本问题,额鹅鹅鹅
在这里插入图片描述

只能安装新的版本,由于之前安装了ROS,自带有cmake,卸载旧版本时还要考虑ROS不崩.参考这篇文章:cmake安装更新

安装好新版本 cmake和g2o后,重新对ch6编译,果不其然,又出错了,相同的错误,不过这次编辑程度多了一些,达到83%.还是g2o库出的问题.

关于这个问题的帖子:《视觉SLAM14讲》第七讲pose_estimation_3d2d程序运行报错
错误:

/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:179:14: error: ‘FixedArray {aka class ceres::internal::FixedArray<double, 3>}’ has no member named ‘fill’
   add_vertex.fill(0.);
   ~~~~~~~~~~~^~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:186:30: error: ‘FixedArray {aka class ceres::internal::FixedArray<double, 3>}’ has no member named ‘data’
     vertex->oplus(add_vertex.data());
                   ~~~~~~~~~~~^~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:192:30: error: ‘FixedArray {aka class ceres::internal::FixedArray<double, 3>}’ has no member named ‘data’
     vertex->oplus(add_vertex.data());
                   ~~~~~~~~~~~^~~~
CMakeFiles/g2oCurveFitting.dir/build.make:75: recipe for target 'CMakeFiles/g2oCurveFitting.dir/g2oCurveFitting.cpp.o' failed
make[2]: *** [CMakeFiles/g2oCurveFitting.dir/g2oCurveFitting.cpp.o] Error 1
CMakeFiles/Makefile2:138: recipe for target 'CMakeFiles/g2oCurveFitting.dir/all' failed
make[1]: *** [CMakeFiles/g2oCurveFitting.dir/all] Error 2
Makefile:90: recipe for target 'all' failed
make: *** [all] Error 2

在这里插入图片描述
找到一篇帖子还是版本问题,不过好像是Ceres 库,关于g2o编译报错与版本选择,准备更新到1.14试试,我查看了自己的Eigen版本为3.3.4,太高担心,Eigen又不匹配

关于卸载Ceres及安装新版本可参考此帖子:slam14讲 第六讲编译报与ceres相关的错误

也可以利用下面这句,不过仍要用locate ceres

检查usr目录下是否删除干净

sudo rm -r /usr/local/lib/cmake/Ceres
sudo rm -rf /usr/local/include/ceres /usr/local/lib/libceres.a
sudo rm -rf /usr/local/lib/cmake/Ceres     //下有关ceres的全都删掉
sudo rm -r /usr/local/share/Ceres

插入一个小知识,关于文件解压   tar中的参数 cvf,xvf,cvzf,zxvf的区别
exp:

tar xvf ceres-solver-1.14.0.tar.gz

结果依然是报错,找到一个贴子 《视觉SLAM14讲》第七讲pose_estimation_3d2d程序运行报错 也是这样错误,不过并没有列出系统的纠错过程,大概意思还是重新安装g2o,于是我又把 g2o,ceres一起安装了一下,按照如下帖子:

slambook2(ch6)—— Ubuntu18.04安装Ceres库 + g2o库 + 例程演示

但是ceres库安装一直报错 

视觉十四讲第六章:编译ceres时:error: ‘integer_sequence’ is not a member of ‘std‘错误

ceres库1.14版本似乎才能可以和Eigen3.3.4,3.3.7版本匹配,其他版本高于1.14好像都会报上面的错误,太难了,进退两难,.ceres库动不了,g2o最新的库也试了,现在看到一个解决办法是Eigen ceres1.14+g2o202004

版本但是没找到帖子怎么下载这个版本.
总是反反复复一直没解决!

BUG解决

前面记录了一堆基本记录了一堆废话,不过也确实是真实的摸索
直接一句话

ceres升级版本,我升级到了2.0.0

安装ceres2.0,旧版本可以不用删除,见教程:
ubuntu20.04安装eigen3.4.0(两种方式)和ceres-solver2.0.0

我的最终版本组合:

# Eigen 3.3.4 从仓库直接安装的
sudo apt install libeigen-dev
# Ceres 2.0.0
cd ceres-solver && git checkout 1.14.x
# g2o 最新版本

插入一个小技巧! 关于 make

,make test

Linux下 config/configure/Configure、make 、make test/make check、sudo make install 的作用

编译成功截图如下:
在这里插入图片描述