eigen_version - yuhannah/skills_map GitHub Wiki

eigen多版本切换

主要流程:备份默认版本,下载安装其他版本,替换默认版本

1.查看当前eigen版本相关信息:

系统默认安装版本3.2.92

头文件目录:

/usr/include/eigen3

包含下述文件夹和文件:

Eigen/

unsupported/

signature_of_eigen3_matrix_library

系统pkg查找文件配置:

/usr/share/pkg-config/eigen3.pc

文件内容:

prefix=/usr
exec_prefix=${prefix}

Name: Eigen3
Description: A C++ template library for linear algebra: vectors, matrices, and related algorithms
Requires:
Version: 3.2.92
Libs:
Cflags: -I${prefix}/include/eigen3

查找命令(最后的eigen3对应eigen3.pc的去后缀名):

$ pkg-config --cflags --libs eigen3
-I/usr/include/eigen3

$ pkg-config --modversion eigen3
3.2.92

cmake查找路径:

/usr/lib/cmake/eigen3/

包含以下文件:

Eigen3Config.cmake

UseEigen3.cmake

查找命令:

find_package(PkgConfig)
pkg_search_module(EIGEN3 REQUIRED eigen3)
if(EIGEN3_FOUND)
  INCLUDE_DIRECTORIES(${EIGEN3_INCLUDE_DIRS})
  message(STATUS "Eigen ${EIGEN3_VERSION} found (include: ${EIGEN3_INCLUDE_DIRS})")
endif()

2.将系统默认版本拷贝一份

系统默认3.2.92版本,存放在系统默认目录下,系统只查找eigen3,不管是什么版本。

拷贝并重命名为eigen3.2.92,便于替换默认目录的内容。

/usr/include/eigen3拷贝并重命名为/usr/include/eigen3.2.92

/usr/share/pkg-config/eigen3.pc拷贝并重命名为/usr/share/pkg-config/eigen3.2.92.pc

/usr/lib/cmake/eigen3拷贝并重命名为/usr/lib/cmake/eigen3.2.92

3.下载某个eigen3版本的源码,解压,编译,安装

cd eigen-3.4.0/
mkdir build
cd build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/include/eigen3.4.0 \
-DCMAKE_PREFIX_PATH=/usr/include/eigen3.4.0 \
-DEIGEN_BUILD_PKGCONFIG=ON \
..
sudo make install

下载源码,创建build文件夹,编译。

安装这一步,可以等同于将编译结果的include和share拷贝到目标路径下。

用命令方式,能避免路径配置存在问题。(比如文件中用到的相对路径等)

这样在/usr/include目录下,同时存在eigen3(即默认eigen3.2.92)和eigen3.4.0.的源码。

eigen3.4.0的源码路径是

/usr/include/eigen3.4.0/include/eigen3

eigen3.4.0的pkgconfig路径是

/usr/include/eigen3.4.0/share/pkgconfig

eigen3.4.0的cmake路径是

/usr/include/eigen3.4.0/share/eigen3/cmake

接下来依次处理这三个部分。

4.将eigen3.4.0的其他配置同步拷贝到对应的目录下

系统pkg查找文件配置:

/usr/include/eigen3.4.0/share/pkgconfig/eigen3.pc拷贝并重命名为eigen3.4.0.pc

/usr/share/pkg-config/eigen3.4.0.pc

修改文件属性:

sudo chmod 777 eigen3.4.0.pc

原文件内容:

prefix=/usr/include/eigen3.4.0
exec_prefix=${prefix}

Name: Eigen3
Description: A C++ template library for linear algebra: vectors, matrices, and related algorithms
Requires:
Version: 3.4.0
Libs:
Cflags: -I${prefix}/include/eigen3

将prefix替换成/usr,用于指向默认eigen3路径。

prefix=/usr
exec_prefix=${prefix}

Name: Eigen3
Description: A C++ template library for linear algebra: vectors, matrices, and related algorithms
Requires:
Version: 3.4.0
Libs:
Cflags: -I${prefix}/include/eigen3

cmake查找路径:

/usr/include/eigen3.4.0/share/eigen3/cmake下的文件拷贝到/usr/lib/cmake/eigen3.4.0/下:

Eigen3Config.cmake

Eigen3ConfigVersion.cmake

Eigen3Targets.cmake

UseEigen3.cmake

5.替换默认eigen3

将eigen3.4.0的头文件/usr/include/eigen3.4.0/include/eigen3的内容替换到/usr/include/eigen3

将eigen3.4.0的/usr/share/pkg-config/eigen3.4.0.pc替换/usr/share/pkg-config/eigen3.pc

将eigen3.4.0的/usr/lib/cmake/eigen3.4.0/替换/usr/lib/cmake/eigen3/

6.最终效果

/usr/include下

eigen3
eigen3.2.92
eigen3.4.0

/usr/share/pkgconfig下

eigen3.2.92.pc
eigen3.4.0.pc
eigen3.pc

/usr/lib/cmake下

eigen3
eigen3.2.92
eigen3.4.0