在编译SLAM的过程中,不同库需要的Eigen版本不一致,因此需要进行Eigen的版本切换。由于Eigen是一个只有头文件的库,因此切换起来还算方便。
1.利用apt-get进行安装
$ sudo apt-get install libeigen3-dev
通过上面的方式进行安装的Eigen,一般是存放在/usr/include
,有一个eigen3
文件夹,应该是长下图这样:
2.利用源码进行安装
从github上把对应版本的Eigen3拉到本地(我是3.2.10),进入文件夹,运行下面的指令:
$ cd Your_eigen_path
$ mkdir build && cd build
$ mkdir ~/eigen_output
$ cmake -DCMAKE_INSTALL_PREFIX=~/eigen_output ..
$ make && make install
这样会在~/eigen_output
文件下生成eigen3
库,进去后应该是长这样的:
进入include
文件夹,执行以下命令:
$ sudo mv eigen3 /usr/include/eigen3210
后面的eigen3210
这个文件名按照自己喜好改就好了,这样/usr/include
目录下就存在两个版本的eigen
,一个是以eigen3
命名的通过apt-get
的方式安装的最新版本,另外一个是以eigen3210
命名通过编译源码的形式安装的自选指定版本。
3.版本切换
系统是通过eigen3.pc
这个文件搜索eigen
库的,两种方式安装都会生成一个eigen3.pc
文件,通过apt-get
安装的存放在/usr/share/pkgconfig
文件夹下,通过源码安装的就存放在安装目录的share/pkgconfig
文件夹下,两个文件的对比如下:
可以看到,除了第一行的安装位置以及第七行版本的差别(左边第8行是我加的注释),两个文件没有其他差别,因此我们保留其中的一个就可以了,这里直接保存通过apt-get
安装的存放在/usr/share/pkgconfig
的.pc
文件,在上图中就是左边那个,这个文件是不可修改的,因此需要修改一下权限:
$ sudo chmod 777 /usr/share/pkgconfig/eigen.pc
接下来对该文件进行修改,由于我们的eigen3
放在了/usr/include
下,因此第一行不用改,保持prefix=/usr
即可,需要修改Version
,用哪个版本就改成哪个版本号,如上图左边所示,另一个版本用//
注释掉即可,修改完保存退出。
接下来回到/usr/include
下,执行以下命令:
$ sudo mv eigen3 eigen337
$ sudo mv eigen3210 eigen3
这样就通过重命名的方式改变系统查找文件时的指向,进而完成了版本切换的工作。