因为之前已经安装了eigen3.3.4和ceres2.1.0,可是这对组合并不能通过isc-loam的编译,看了晚上的解决方法说是提高eigen版本到3.3.7以上就可以了。但是刚刚试了一下,还是不行,看来没想的那么简单。
因为之前已安装了eigen3.3.4,并且好多代码都是在这个环境的基础上搭建起来的,因此这个版本肯定不能扔掉。所以就想做一个3.3.4与3.3.8共存的一个eigen。所以首先应该把eigen3.3.4的一些东西给备份下来。其中的主要地方在:
在还没安装其他版本时,目前usr/include/eigen3中的东西是eigen3.3.4中的东西,里面是
这个文件夹里面的东西要记一下,因为要换成3.3.8中同样的文件里面的内容。
cmakelists中通常使用${EIGEN3_VERSION_STRING}变量来检查eigen版本,此变量通过/usr/lib/cmake/eigen3目录下的Eigen3Config.cmake文件得到;
安装多版本后,新的*.cmake文件生成在你安装的位置中的/eigen3/cmake目录下;例如:/usr/share/eigen3/cmake
因此先备份原来的文件夹及原来的安装文件:参考eigen安装及多版本管理
sudo mv /usr/include/eigen3 /usr/include/eigen334 #334为旧版本
cmakelists中通常使用${EIGEN3_VERSION_STRING}变量来检查eigen版本,此变量通过/usr/lib/cmake/eigen3目录下的Eigen3Config.cmake文件得到;
sudo mv /usr/lib/cmake/eigen3 /usr/lib/cmake/eigen334
系统通过eigen3.pc这个文件搜索eigen库的,两种方式安装都会生成一个eigen3.pc文件,通过apt-get安装的存放在**/usr/share/pkgconfig文件夹下,通过源码安装的就存放在安装目录的/usr/local/share/pkgconfig**文件夹下,除了版本和安装位置不同外其它都一样,因此在旧版本中不更改eigen3.pc,因为一会安装完新版本后依旧可以使用这个文件,只更改里面代码就可以
这个里面的版本可以通过
pkg-config --modversion eigen3
查看
官方源码地址:http://eigen.tuxfamily.org/index.php?title=Main_Page
下载所需版本(我下载的是3.3.8),解压
编译:
cd到eigen
mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=/usr/include/eigen338 .. //安装到usr/include/eigen338
make
sudo make install
安装完成后去usr/include/eigen338看一下,这样会在usr/include/eigen338文件下生成eigen3库,进去后应该是长这样的:
其中include 中有一个eigen3文件夹,而这个eigen3文件夹就跟之前的usr/include/eigen3中的一样了
因此,进入include文件夹,执行以下命令:
sudo mv eigen3/ usr/include/eigen3
这样就是直接将3.3.8中的eigen3放在了usr/include/eigen3(如果想要换回3.3.4版本就把这个eigen3还放回到eigen338中,把eigen334改回eigen3就可以了,就是想用哪个版本哪个就是eigen3)到这里还不算完,因为还有.pc文件和.cmake文件还没换。
系统是通过eigen3.pc这个文件搜索eigen库的,两种方式安装都会生成一个eigen3.pc文件,通过apt-get安装的存放在/usr/share/pkgconfig文件夹下,通过源码安装的就存放在安装目录的share/pkgconfig文件夹下,两个文件的对比如下:参考Eigen3多版本切换
可以看到,除了第一行的安装位置以及第七行版本的差别(左边第8行是我加的注释),两个文件没有其他差别,因此我们保留其中的一个就可以了,这里直接保存通过apt-get安装的存放在/usr/share/pkgconfig的.pc文件,在上图中就是左边那个,这个文件是不可修改的,因此需要加权限修改。
接下来对该文件进行修改,由于我们的eigen3放在了/usr/include下,因此第一行不用改,保持prefix=/usr即可,需要修改Version,用哪个版本就改成哪个版本号,如上图左边所示,另一个版本用//注释掉即可,修改完保存退出。
到目前为止,使用命令
pkg-config --modversion eigen3
已经可以看到版本已经更改为3.3.8了,但是呢,在编译的时候还是不能用,因为目前为止,cmake还找不到eigen3.3.8,因此得将cmake那里改一下。
新安装的eigen的cmake文件在/usr/include/eigen338/eigen3/share/eigen3/cmake中,因此,
cd usr/include/eigen338/eigen3/share/eigen3/
sudo cp -r cmake/ /usr/lib/cmake/eigen338
这样在/usr/lib/cmake中就有了eigen334和eigen338两个文件夹,用哪个版本就将这个版本的文件夹名改为eigen3,因此将eigen338改为eigen3
sudo mv eigen338 eigen3
到目前为止,eigen3已经全部换成eigen3.3.8了
但是,当我编译时依旧会报错,报错为:
Failed to find Ceres - Found Eigen dependency, but the version of Eigen found (3.3.8) does not exa
意思就是ceres里面的编译版本是之前的3.3.4而你现在的eigen版本为3.3.8 因此,需要改一下
具体参考Found Eigen dependency, but the version of Eigen……编译问题解决
问题原因:安装版本与CMakeList文件所需版本不匹配
即将如下代码添加到/usr/local/lib/cmake/Ceres/CeresConfig.cmake中
set(EIGEN_INCLUDE_DIR "/usr/include/eigen3") #添加此行
set(CERES_EIGEN_VERSION 3.3.8) #添加此行,版本号与你安装的对应
当我以为这下isc-loam应该可以编译通过的时候,确还是报了那个错,真的不理解,折腾这么大一会改了eigen3的版本,居然还是不行,还得再查查问题。
报的错误为:
但是其他我之前的代码还是可以正常编译的,之前的代码的环境是 ceres2.1.0和eigen3.3.4。现在换成了ceres2.1.0和eigen3.3.8依旧可以。
1.Eigen3多版本切换
2.Linux系统下,如何安装多个不同版本的Eigen库且灵活调用呢?
3.eigen安装及多版本管理
4.eigen相关问题(安装、多版本切换、版本查看)
5.对eigen版本冲突的解决----多版本管理
6.Found Eigen dependency, but the version of Eigen……编译问题解决