Ubuntu系统下切换Eigen库的不同版本

Eigen3是常用的开源线性代数库,主要用于矩阵运算,SLAM领域常用到的优化工具g2o、Ceres等都依赖Eigen3。

Eigen3是一个更新非常快的第三方库,因此在进行开源代码测试时会遇到Eigen版本不匹配的问题,这种情况下就需要进行Eigen3的版本修改或替换,本文就介绍在Ubuntu系统下如何切换Eigen库的不同版本。

场景示例

  • 系统版本:Ubuntu18.04
  • Eigen版本:从 Eigen3.3.4 替换为 Eigen3.2.10
  • 替换原因:视觉SLAM方案ORB-SLAM2要求Eigen版本不低于3.1.0,而Ubuntu18.04中自带的Eigen3.3.4版本太新了,直接使用会导致编译ORB-SLAM2核心库报错,因此这里将自带的Eigen3.3.4替换为Eigen3.2.10

注意:这里只是拿Eigen3.3.4和Eigen3.2.10举例,其他Eigen版本也适用,因为原理是相通的、本质是一样的。

1. 移除原版本

首先,需要移除系统自带的Eigen3.3.4。Eigen库只有头文件,其存放的默认路径为 /usr/include/eigen3 ,因此可以将这个文件夹改个别名或者直接删除,为了方便后面切换会系统自带的Eigen3.3.4版本,这里建议改别名的方式来移除:

# 改别名的方式移除原版本:Eigen3.3.4
sudo mv -f /usr/include/eigen3 /usr/include/eigen334.bak

2. 切换新版本

2.1 方式一:安装新版本

如果系统已经安装了准备更换的Eigen版本,那么就不用再安装一遍,而采取直接切换版本的方法,具体看2.2节。

如果系统还没有安装准备更换的Eigen版本,则需要下载Eigen源码到本地,进行编译和安装,这里以Eigen3.2.10为例:

# 下载Eigen源码
# 其他地址也可以,只要能保证Eigen源码下载到本地即可
git clone https://gitlab.com/libeigen/eigen.git

#切换代码分支
cd eigen
git checkout 3.2.10

#编译安装
mkdir build && cd build
cmake ..
sudo make install

系统默认会将该库安装到路径 /usr/include/eigen3(也可能会在/usr/local/include/eigen3) 中,可以通过.../eigen3/Eigen/src/Core/util/Macros.h文件中的宏变量查看当前的Eigen版本,比如查到的版本是3.2.10,则宏变量如下:

#define EIGEN_WORLD_VERSION 3
#define EIGEN_MAJOR_VERSION 2
#define EIGEN_MINOR_VERSION 10

此时,/usr/include/ 目录下的Eigen版本已经从 3.3.4 切换到 3.2.10。

2.2 方式二:直接切换版本

这里假设系统已经安装了准备更换的Eigen版本,那么可以通过直接改文件夹名来切换。假设准备更换的Eigen3.2.10库所在路径为 /usr/include/eigen3210.bak,那么直接改文件夹名:

# 将已经安装在系统的Eigen3.2.10库,通过改文件夹名的方式设置为系统默认使用的Eigen3库
sudo mv -f /usr/include/eigen3210.bak /usr/include/eigen3

此时,/usr/include/目录下的Eigen版本已经从 3.3.4 切换到 3.2.10。

2.3 【重要】注意事项1

在很多程序中是直接通过 #include <Eigen/xxx> 而不是 #include <eigen3/Eigen/xxx> 来引用Eigen库的,所以需要将 .../eigen3/Eigen 复制到上一级目录,不然有些程序在引用时会报错:

# 将 eigen3/Eigen 复制到上一级目录
sudo cp -rf /usr/include/eigen3/Eigen /usr/include/

经过复制后,路径 /usr/include/下就有 eigen3 和 Eigen 两个文件夹了。

2.4 注意事项2

有些程序引用Eigen时会到路径 /usr/local/include/目录去寻找,所以最好把上面 /usr/include/中的 eigen3 和 Eigen 两个文件夹再复制到 /usr/local/include/中:

# 将 eigen3 和 Eigen 文件夹复制到 /usr/local/include
sudo cp -rf /usr/include/eigen3/Eigen/ /usr/local/include/
sudo cp -rf /usr/include/eigen3 /usr/local/include/

参考来源

  1. 张虎. 机器人SLAM导航核心技术与实战. 北京:机械工业出版社,2022.1
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值