GTSAM无法找到Eigen问题求助(ROS Catkin环境)
解决GTSAM+ROS Catkin编译时Eigen头文件找不到的问题
可能的原因
- Catkin构建系统未正确识别Eigen的安装路径
- GTSAM编译时的Eigen配置未被Catkin项目正确继承
- 系统中存在多个Eigen版本引发路径冲突
具体解决方法
1. 确认Eigen的安装路径
先定位你的Eigen 3.3.4实际安装位置,执行命令:
find /usr -name "Eigen" -type d | grep 3.3.4
通常会得到类似/usr/local/include/eigen3/Eigen或/usr/include/eigen3/Eigen的结果,记下该路径的父目录(比如/usr/local/include/eigen3)。
2. 在Catkin项目的CMakeLists.txt中显式指定Eigen路径
在你的ROS包的CMakeLists.txt开头添加以下代码,替换为你找到的Eigen父路径:
# 显式指定Eigen的安装目录 set(EIGEN3_INCLUDE_DIR "/usr/local/include/eigen3") include_directories(${EIGEN3_INCLUDE_DIR})
3. 确保GTSAM配置正确传递到Catkin
如果项目通过find_package(GTSAM REQUIRED)引入GTSAM,在该语句后添加:
include_directories(${GTSAM_INCLUDE_DIR}) link_directories(${GTSAM_LIBRARY_DIR})
同时在catkin_package中导出GTSAM的依赖:
catkin_package( ... INCLUDE_DIRS include ${EIGEN3_INCLUDE_DIR} ${GTSAM_INCLUDE_DIR} LIBRARIES ... ${GTSAM_LIBRARIES} DEPENDS GTSAM Eigen )
4. 清理Catkin构建目录后重新编译
执行以下命令彻底清理并重新构建:
cd ~/catkin_ws catkin clean catkin_make -DGTSAM_USE_SYSTEM_EIGEN=ON
若使用catkin build:
catkin clean catkin build --cmake-args -DGTSAM_USE_SYSTEM_EIGEN=ON
5. 解决多Eigen版本冲突
如果系统同时存在ROS自带的Eigen(通常在/opt/ros/<distro>/include/eigen3)和你安装的3.3.4版本,可在CMakeLists.txt中强制优先使用指定版本:
# 强制优先使用指定的Eigen版本 set(CMAKE_PREFIX_PATH "/usr/local/include/eigen3" ${CMAKE_PREFIX_PATH})
内容的提问来源于stack exchange,提问作者km11
相关产品推荐
相关产品推荐

