其他分享
首页 > 其他分享> > 代码笔记2 slam十四讲中的配置问题

代码笔记2 slam十四讲中的配置问题

作者:互联网

1

 总而言之,在ubuntu上搞slam,版本真的是大坑,每一步都是坑。
 这里是ch6的配置,先说我成功的版本配置

Eigen 3.2.10
Ceres 1.14.0
g2o 高博版本(我实在没找到g2o的版本号,网上也没人说,但一定不是最新版本)
cmake 3.10.2

 同时查阅资料发现,好像Sophus库的编译需要Eigen3.3版本的支持,实在是晕倒。在ch6中要退回Eigen3.2版本

 其次也有自己学到的知识。一个c++库一般由三部分组成,头文件、库文件、可执行文件
头文件的位置一般在/usr/local/include(通过编译安装的)或者/usr/include(apt安装的)
库文件的位置在/usr/local/lib或者/usr/lib
可执行文件的位置在/usr/local/bin或者/usr/bin
 还有pc文件,被用于在CMakelists文件中的find_packages,一般在pkgconfig,其中lib/pkgconfig中有一些,也不是全部,好像没有固定位置,我也没太明白
 知道这些,卸载和转换版本时就可以更方便

2.bug

 第一个出现在ch6程序编译中
显示了

CMake Error at /usr/local/lib/cmake/Ceres/CeresConfig.cmake:93 (message):
  Failed to find Ceres - Found Eigen dependency, but the version of Eigen
  found (3.2.9) does not exactly match the version of Eigen Ceres was
  compiled with happy().  This can cause subtle bugs by triggering violations
  of the One Definition Rule.  See the Wikipedia article
  http://en.wikipedia.org/wiki/One_Definition_Rule for more details
Call Stack (most recent call first):
  /usr/local/lib/cmake/Ceres/CeresConfig.cmake:223 (ceres_report_not_found)
  CMakeLists.txt:43 (find_package)


-- Configuring incomplete, errors occurred!

方法可见https://blog.csdn.net/qq_17424119/article/details/103636765
当时年轻了,加了没用,回想一下,可能是加错了地方,从而走上了一条卸载、重装库版本的远路,但也算收获了些别的东西吧。

然后我首先决定重装ceres库。卸载之后(卸载方法详情百度),结果,由于和Eigen库的不兼容,编译时频频出错。
编译高博的ceres库时出现了

CMake Error at /usr/local/lib/cmake/Ceres/CeresConfig.cmake:88 (message): Fa

我找不全了,当时没记录下来,这个问题我没解决,不知道咋办,可能是版本问题,我后来转头安装别的版本的ceres库了。

之后我下载了ceres1.14.0版本的库,编译时出现了错误:

error: variable or field ‘it’ declared void for (typename C::const_iterato

详情可见https://blog.csdn.net/weixin_42098782/article/details/89811180?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-0.pc_relevant_antiscanv2&spm=1001.2101.3001.4242.1&utm_relevant_index=3
这人怎么是拍照的啊,要是打字的早就找到问题了好吗
归根结底是Eigen库版本不对,后续再说。
最后就是在ch6中出现的问题了

bug aka class ceres::internal::FixedArray<double, 3>}’ has no member named

问题解决在https://blog.csdn.net/qq_41880787/article/details/124016997,可能是g2o的安装问题。

3安装

 这三个库安装是有顺序的,Ceres库和g2o库是需要Eigen库进行编译安装的,所以需要先安装Eigen库。
 首先是Eigen库。
你要先确认你是否安装了Eigen库,一般安装后的头文件路径在
/usr/local/include
而我们在cmake中使用find_packages时系统会通过一个pc文件寻找Eigen库的头文件,这个文件被放在
/usr/local/share/pkgconfig
同时我们要查看Eigen库的版本
/usr/local/share/pkgconfig/eigen.pc打开后可以看到

比如我这里是3.3.90版本

 为了避免直接重新安装导致的问题,我们需要进行以下操作。但同时我们也不能完全卸载掉已有的Eigen库,因为Eigen库的3.3版本可能会被用于其他库的编译或者程序的使用,我们也需要保留这些文件,以便日后可以切换版本。
 在/usr/local/include路径中使用 sudo mv eigen3 eigen3390重命名了该文件夹,以便再次安装时不冲突。同时,用相同的方法在/usr/local/share/pkgconfig中进行sudo mv eigen3.pc eigen3390.pc重命名该文件
 接着下载安装其他版本的Eigen库
Eigen库的链接 http://eigen.tuxfamily.org/index.php?title=Main_Page
直接上去找3.2.10版本的,下载zip文件
解压后进行

mkdir build
cmake ..
sudo make install

 Eigen库是只有头文件的库,所以不需要make命令了
完成之后再去相应的路径/usr/local/include查看,可以看到全新的eigen3文件了.
为了方便后续的程序配置,防止出现fatal error: Eigen/Geometry:No such file or directory,此处进行一个软连接比较好

ln -s eigen3/Eigen Eigen

此时再去编译ceres库和G2o库,编译前别忘了卸载百度一下(),同时注意版本

标签:cmake,Eigen,笔记,编译,slam,usr,版本,讲中,local
来源: https://www.cnblogs.com/HumbleHater/p/16226698.html