提示:该博客仅仅用于记录本人在安装自用环境下的真实有效配置:
一、问题描述
- 本地已安装了最新的Eigen 与Ceres,项目配置需要回退到旧版
- 一种方式是采用Docker,另外一种就是本文,安装多个版本在本地并灵活调用,彼此不影响
- Ceres 依赖于Eigen编译,假设本机已经安装了Ceres 2.2.0 和 Eigen 3.4.0
- 现在想配置使用旧版本 Ceres 1.4.0 和 Eigen 3.3.7
二、源码编译 Eigen 3.3.7
- https://github.com/eigenteam/eigen-git-mirror,选择版本3.3.7下载
- 解压进入目录
- 创建安装目录 /usr/local/eigen-3.3.7/, /usr/local/目录一般用于源码编译到本地的软件
sudo mkdir /usr/local/eigen-3.3.7
- cmake 编译安装到指定目录 /usr/local/eigen-3.3.7
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX="/usr/local/eigen-3.3.7"
make -j4
sudo make install
三、源码编译 Ceres 1.14.0
- https://github.com/ceres-solver/ceres-solver, 下载ceres 1.14.0版本
- 创建安装目录 /usr/local/Ceres-1.14.0/
sudo mkdir /usr/local/Ceres-1.14.0
- 解压进入目录,然后安装到指定目录/usr/local/Ceres-1.14.0,并指定依赖Eigen 3.3.7, 因为此时系统默认是3.4.0,不指定版本会报错
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/Ceres-1.14.0 -DEigen3_DIR=/usr/local/eigen-3.3.7/share/eigen3/cmake
make -j4
sudo make install
四、具体使用 Ceres 1.14.0 与 Eigen 3.3.7
在具体项目根目录CMakeLists.txt中修改代码
# 指定Eigen的自定义安装路径
set(Eigen3_DIR /usr/local/eigen-3.3.7/share/eigen3/cmake)
find_package(Eigen3 REQUIRED)
include_directories(${EIGEN3_INCLUDE_DIR})
# 指定Ceres的自定义安装路径
set(Ceres_DIR /usr/local/Ceres-1.14.0/lib/cmake/Ceres)
find_package(Ceres REQUIRED)
include_directories(${CERES_INCLUDE_DIR})