1.ceres的依赖项tbb库中tbb_stddef.h文件包含了tbb库的版本信息,但已从tbb 2021.1版中删除。
CMake Error at cmake/FindTBB.cmake:224 (file):
file failed to open for reading (No such file or directory):
/usr/include/tbb/tbb_stddef.h
Call Stack (most recent call first):
cmake/FindSuiteSparse.cmake:288 (find_package)
CMakeLists.txt:281 (find_package)
相同目录下的version.h有相似内容,在FindTBB.cmake文件224行将tbb_stddef.h替换为version.h,顺利通过编译。
2.make过程中遇到的报错:
/home/jadrian/fslambook2/3rdparty/ceres-solver/internal/ceres/gtest/gtest.h:10445:35: error: variable or field ‘it’ declared void
10445 | for (typename C::const_iterator it = container.begin();
| ^~
make[2]: *** [internal/ceres/CMakeFiles/residual_block_test.dir/build.make:76:internal/ceres/CMakeFiles/residual_block_test.dir/residual_block_test.cc.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:2519:internal/ceres/CMakeFiles/residual_block_test.dir/all] 错误 2
这是Eigen版本的问题,需要安装Eigen3.2.5版本,但是我其他库依赖3.4版本的Eigen所以不打算卸载,而是重新在/urs目录下安装3.2.5版本的Eigen:
Releases · libeigen / eigen · GitLab
在下载好的Eigen3.2.5源码解压目录下输入命令:
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr/include/eigen3.2.5 ..
sudo make install
遂将Eigen3.2.5安装成功。在ceres-solver/cmake下将FindEigen.cmake文件替换为以下内容:
(其中的“/usr/eigen3/include/eigen3”替换为Eigen3.2.5安装路径)
之后顺利编译安装库
相同目录下的version.h有相似内容,在FindTBB.cmake文件224行将tbb_stddef.h替换为version.h,顺利通过编译。ceres的依赖项tbb库中tbb_stddef.h文件包含了tbb库的版本信息,但已从tbb 2021.1版中删除。
这里参考官网的说明文档:链接
第一次失败
下载的高翔的SLAM十四讲源码,直接解压3rdparty/
ce
res-
solver
.tar.gz,然后进入文件夹mkdir一个build文件夹,内部cmake,就出错了
查阅了一些资料发现,高翔的SLAM源码里的
ce
res的版本有点陈旧,应该在官网下载最新的稳定版本,并且依赖项也需要更换成匹配的版本,
ce
res官网链接写的很清楚(TIPS:链接在上方,不熟
文章目录一、问题描述二、解决方法
一、问题描述
使用
ce
res
编译
报错
error: ‘integer_sequen
ce
’ is not a member of ‘std’
二、解决方法
出现这个问题的原因应该是使用了
c++
14 标准。
将Cmake中的
set(CMAKE_CXX_FLAGS "-std=
c++
11")
set(CMAKE_CXX_STANDARD 14)
然后再次
编译
就可以了。
问题解决方案2-------------ros的 Cartographer,ninja,
ce
res-
solver
,cartographer_ros安装及其问题,附上最好的安装方法(亲测有效)
一.
编译
Cartographer及其相关文件出错(强烈建议删除所有的相关文件,然后重新按照下面步骤安装-----------可别怪我没有提醒你,亲测有效!!!!!!)
1.出错内容(1):
CMake Error: CMake was unable to find a build program corresponding to "Ninja". CMAKE_MAKE_PROGRAM is no...
由于项目有使用到google的
ce
res库,于是就踩了一天的坑。。。
以前做SLAM
编译
cartographer的时候其实也装过,当时很轻松的就装好了,也没
遇到
什么困难,但是这次被卡了一天…
在网上试过好几个
ce
res版本,都是在make阶段报了一大堆错,开始以为是和eigen库不兼容的问题,eigen库也换了好几个版本,百度了半天也没找到原因,最后多亏了google大法。
最终发现问题是g++、gcc版本太低了,之前由于其他项目的需要将版本降级到了4.6,重新下载5.5版本并升级问题就解决了。
具体升级方
原因: 安装的
ce
res库版本与eigen库版本冲突, 我的eigen库版本为3.3.7, 将
ce
res换为1.14.0 版本的就能解决问题
1. 首先删除之前的
ce
res-
solver
sudo rm -r /usr/local/lib/cmake/
Ce
res
sudo rm -rf /usr/local/include/
ce
res /usr/local/lib/lib
ce
res.a
sudo rm -rf /usr/local/lib/cmake/
Ce
res .
你可以按照以下步骤进行
Ce
res-
Solver
计算库的
编译
安装:
1. 首先,确保你的系统已经安装了必要的依赖项,包括cmake、eigen3和suitesparse。你可以通过以下命令在Ubuntu上安装这些依赖项:
sudo apt-get install cmake libeigen3-dev libsuitesparse-dev
2. 接下来,从
Ce
res-
Solver
的GitHub发布页面下载最新版本的源代码压缩包。你可以点击[这里](https://github.com/
ce
res-
solver
/
ce
res-
solver
/releases/tag/2.1.0)访问该页面。
3. 解压下载的源代码压缩包,并进入解压后的目录。
4. 创建一个用于构建
Ce
res-
Solver
的build目录,并进入该目录:
mkdir build
cd build
5. 运行cmake命令来配置构建过程:
cmake ..
你也可以通过添加额外的选项来定制构建过程。例如,如果你想使用Eigen的稠密矩阵支持,可以添加`-DEIGENSPARSE=OFF`选项。
6. 运行make命令进行
编译
:
make -j4
这里的`-j4`表示使用4个线程进行并行
编译
,你可以根据自己的系统进行调整。
7.
编译
完成后,运行make install命令进行安装:
sudo make install
这将会将
Ce
res-
Solver
的头文件和库文件安装到系统默认的位置。
完成以上步骤后,你就成功地安装了
Ce
res-
Solver
计算库。你可以根据需要在自己的项目中使用它。如果需要更详细的安装说明或者其他帮助,请参考
Ce
res-
Solver
的官方文档。