由于ceres库和eigen库有一定的版本对应关系,因此很容易在编译期间报错。
报错内容是:虽然找到了.cmake,但是版本不匹配,需要eigen3.2.92之类之类
之前通过Eigen的官网直接安装了Eigen3.3.7(采用3.3版本是为了和sophus所对应,教程)
但是Eigen3.3.7无法与ceres1.11.0对应(如果你是通过artographer安装的ceres,那么版本就为1.11.0)
因此,为了找到与Eigen3.3.7对应版本的ceres,可以直接在ceres官网上查找最新版本的ceres1.14.0进行安装,当然,直接git可能会慢,因此先下载安装包再进行安装。
由于Eigen3.3.7是最新的eigen稳定版本,所以它与最新的ceres稳定版本1.14.0对应肯定没有任何问题。
0.准备工作
- 删除掉一些旧版本ceres的文件,否则直接安装清理不掉,依然会报错
①/usr/local/include中的ceres文件夹直接删掉
②/usr/local/lib下的libceres.a
③/usr/local/lib/cmake/Ceres 下有关ceres的全都删掉
④/usr/local/share/Ceres 文件夹删掉
上面四点中,若是没有的话就不必删了
如果怕还有残余,则在终端:locate ceres
然后 locate Ceres
主要看usr底下还有没有关于ceres的,若有,必杀之
- 安装依赖库
看ceres官网查看需要哪些依赖库(安装之前还是建议先locate一遍,看看是否已经安装过)
下面进行安装ceres1.14.0
1.下载ceres1.14.0压缩包并安装
-
下载链接:https://download.csdn.net/download/weixin_44684139/12249711
-
提取到此处,并进入文件夹,在终端打开
-
编译安装
mkdir build
cd build
cmake ..
make -j4
sudo make install
2.测试
CMakeLists.txt中:
(用的是slam十四讲ch6中的curvefitting代码)
# Ceres
find_package(Ceres REQUIRED)
include_directories(${CERES_INCLUDE_DIRS})
add_executable(ceresCurveFitting ceresCurveFitting.cpp)
target_link_libraries(ceresCurveFitting ${OpenCV_LIBS} ${CERES_LIBRARIES})
最终测试成功
3. 补充
如果依然报版本不匹配的错误,很有可能是准备工作中ceres的文件没删干净,记住那个CeresConfig.cmake文件一定要删掉,可以用locate位置,也可以在kdevelop的报错中双击点开文件。
若不想删除其他版本eigen,则修改ceres-solver-1.14.0-for-eigen/cmake/FindEigen.cmake文件中:
list(APPEND EIGEN_CHECK_INCLUDE_DIRS
/usr/local/include/eigen3
/usr/local/homebrew/include # Mac OS X
/opt/local/var/macports/software # Mac OS X.
/opt/local/include)
#/usr/include)
重新cmake …即可