CMake未生成Eigen3配置文件,ORB-SLAM3编译失败求助
问题背景
在本地虚拟机部署ORB-SLAM3时,因系统包管理器默认的Eigen3 3.4.4版本与代码存在兼容性问题,手动编译安装了Eigen3 3.2.1。已完成Pangolin(指定commit版本)和OpenCV 3.2.0的安装,/usr/local/include目录下包含eigen3、opencv、opencv2、pangolin头文件目录,但/usr/local/lib/cmake仅存在Pangolin的配置文件。运行ORB-SLAM3的build.sh时,CMake报错无法找到Eigen3的配置文件。
疑问解答
1. 为何相同编译安装命令能生成Pangolin的配置文件,却无法生成Eigen3的?
Eigen3是纯头文件库,3.2.1这类早期版本默认不会生成Eigen3Config.cmake这类CMake配置文件,其安装过程仅负责将头文件复制到指定目录。而Pangolin是包含二进制库的项目,CMake在安装阶段会自动生成并安装配套的配置文件,用于其他CMake项目查找依赖。
2. 为何OpenCV配置文件不在/usr/local/lib/cmake但CMake能检测到?
CMake查找依赖包时,会默认搜索多个标准路径,除了/usr/local/lib/cmake,还包括/usr/local/share/<PackageName>这类路径。OpenCV 3.2.0的配置文件默认安装在/usr/local/share/OpenCV,该路径属于CMake的默认搜索范围,因此ORB-SLAM3的CMake能自动定位到OpenCV_DIR并识别版本。
解决Eigen3配置问题的方案
针对Eigen3 3.2.1无自带配置文件的情况,可通过以下两种方式解决:
方案1:直接指定头文件路径
修改ORB-SLAM3根目录下的CMakeLists.txt,替换原有的find_package(Eigen3 REQUIRED)语句,直接添加Eigen3的头文件目录:
# 替换原find_package(Eigen3 REQUIRED) include_directories(/usr/local/include/eigen3)
方案2:手动生成CMake配置文件
- 创建
Eigen3Config.cmake文件,内容如下:
set(Eigen3_FOUND TRUE) set(Eigen3_VERSION 3.2.1) set(Eigen3_INCLUDE_DIRS /usr/local/include/eigen3) set(Eigen3_INCLUDE_DIR /usr/local/include/eigen3) set(Eigen3_LIBRARIES "") set(Eigen3_LIBRARY "")
- 将文件放到指定目录:
sudo mkdir -p /usr/local/lib/cmake/Eigen3 sudo cp Eigen3Config.cmake /usr/local/lib/cmake/Eigen3/
完成后重新运行ORB-SLAM3的build.sh即可。
内容的提问来源于stack exchange,提问作者barkin sagan

