dxinl@dxinl-NUC13VYKi5:~/orb_slam2/semantic_-mapping_on_-orbslam$ cd /home/dxinl/orb_slam2/semantic_-mapping_on_-orbslam && ./build.sh Configuring and building Thirdparty/DBoW2 ... mkdir: 无法创建目录 “build”: 文件已存在 -- Configuring done -- Generating done -- Build files have been written to: /home/dxinl/orb_slam2/semantic_-mapping_on_-orbslam/Thirdparty/DBoW2/build [100%] Built target DBoW2 Configuring and building Thirdparty/g2o ... mkdir: 无法创建目录 “build”: 文件已存在 -- BUILD TYPE:Release -- Compiling on Unix -- Configuring done -- Generating done -- Build files have been written to: /home/dxinl/orb_slam2/semantic_-mapping_on_-orbslam/Thirdparty/g2o/build [100%] Built target g2o Uncompress vocabulary ... Configuring and building ORB_SLAM2 ... mkdir: 无法创建目录 “build”: 文件已存在 Build type: Release -- Eigen found (include: /usr/include/eigen3, version: 3.3.7) -- OpenNI found (version: 1.5.4.0, include: /usr/include/ni, lib: /usr/lib/libOpenNI.so) -- OpenNI2 found (version: 2.2.0.33, include: /usr/include/openni2, lib: /usr/lib/libOpenNI2.so) ** WARNING ** io features related to pcap will be disabled ** WARNING ** io features related to png will be disabled -- OpenNI found (version: 1.5.4.0, include: /usr/include/ni, lib: /usr/lib/libOpenNI.so) -- OpenNI2 found (version: 2.2.0.33, include: /usr/include/openni2, lib: /usr/lib/libOpenNI2.so) -- looking for PCL_COMMON -- looking for PCL_OCTREE -- looking for PCL_IO -- looking for PCL_KDTREE -- looking for PCL_GEOMETRY -- looking for PCL_SEARCH -- looking for PCL_VISUALIZATION -- looking for PCL_SAMPLE_CONSENSUS -- looking for PCL_FILTERS -- Eigen3 found at: /usr/include/eigen3 -- Eigen3_DIR set to: /usr/include/eigen3 CMake Error at CMakeLists.txt:53 (find_package): Found package configuration file: /usr/local/lib/cmake/Pangolin/PangolinConfig.cmake but it set Pangolin_FOUND to FALSE so package "Pangolin" is considered to be NOT FOUND. Reason given by package: Pangolin could not be found because dependency Eigen3 could not
时间: 2025-07-05 11:41:24 AIGC 浏览: 28
<think>好的,用户遇到了在编译ORB-SLAM2时出现的CMake错误,提示找不到Pangolin,因为依赖的Eigen3未被发现。我需要结合提供的引用信息,逐步分析问题原因并提供解决方案。
首先,用户引用了四个不同的引用源,其中引用1和引用4指出问题根源是Eigen3未被正确找到,导致Pangolin配置失败。引用2提到了链接错误,无法找到-lEigen3::Eigen,这可能与CMake配置有关。引用3建议修改CMakeLists.txt,在find_package时添加NO_MODULE参数。
接下来,我需要考虑常见的解决方案。首先检查Eigen3是否正确安装,确保其路径被CMake识别。然后,查看ORB-SLAM2和Pangolin的CMakeLists文件,确认find_package的调用是否正确,可能需要添加NO_MODULE或指定Eigen3_DIR。另外,用户可能需要手动设置Eigen3的路径,或者更新CMakeLists中的依赖配置。
还需要注意,引用3提到在find_package(Eigen3 REQUIRED)后添加NO_MODULE,这可能帮助CMake正确找到Eigen3的配置。此外,引用4提到find_package使用CONFIG模式,如果Eigen3的配置文件路径未正确设置,会导致失败,因此用户可能需要设置Eigen3_DIR环境变量指向正确的cmake目录。
综合这些信息,解决方案应包括以下几个步骤:验证Eigen3安装,调整CMakeLists.txt中的find_package参数,设置Eigen3_DIR,重新编译安装Pangolin,最后重新配置ORB-SLAM2。同时,需要提醒用户注意版本兼容性和路径的正确性。</think>以下是解决Pangolin依赖Eigen3未找到问题的分步方案:
### 1. 验证Eigen3安装状态
首先检查系统中是否已正确安装Eigen3:
```bash
# 检查头文件路径
ls /usr/include/eigen3/Eigen
# 验证版本
pkg-config --modversion eigen3
```
如果未安装,使用以下命令安装:
```bash
sudo apt-get install libeigen3-dev
```
### 2. 调整CMakeLists配置
修改ORB_SLAM2的CMakeLists.txt文件:
```cmake
# 原语句可能为
find_package(Eigen3 REQUIRED)
# 修改为
find_package(Eigen3 REQUIRED NO_MODULE)
```
参数`NO_MODULE`强制CMake使用Config模式查找Eigen3,避免模块模式失败[^3][^4]。
### 3. 设置环境变量
如果Eigen3安装路径不在默认位置:
```bash
# 设置Eigen3的cmake配置路径
export Eigen3_DIR=/usr/local/share/eigen3/cmake
# 验证路径有效性
ls $Eigen3_DIR/Eigen3Config.cmake
```
### 4. 重新编译Pangolin
在ORB_SLAM2项目之前,需要确保Pangolin正确链接Eigen3:
```bash
cd Pangolin
mkdir build && cd build
cmake .. -DEigen3_DIR=$Eigen3_DIR
make -j4
sudo make install
```
### 5. 最终验证
重新配置ORB_SLAM2项目:
```bash
cd ORB_SLAM2
mkdir build && cd build
cmake .. -DCMAKE_MODULE_PATH=/usr/local/lib/cmake/Pangolin
make
```
如果仍有链接错误,尝试添加显式链接:
```cmake
target_link_libraries(${PROJECT_NAME} Eigen3::Eigen)
```
### 常见错误处理
- **链接错误**`cannot find -lEigen3::Eigen`:说明CMake未正确生成链接指令,需检查`find_package`是否返回`Eigen3_FOUND=TRUE`[^2]
- **版本冲突**:确保Eigen3版本≥3.3.4,ORB_SLAM2要求新版Eigen支持
$$ \text{验证公式:} \exists x \in \mathbb{R}, \text{s.t. } \|Ax - b\|_2 \text{最小} \quad (\text{需要Eigen3的线性代数支持}) $$
阅读全文
相关推荐



















