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