问题
在装了 ROS 的机器人系统里编译 orbslam3 时, 发现 Thirdparty sophus 库密集报错, 导致 orbslam3 无法完成编译


排查
-
同样的代码在装了
ROS的笔记本ubuntu18.04系统里可以成功通过编译, 但是在装了同版本ROS的机器人ubuntu18.04系统里无法编译 -
Sophus库本身可以正常编译 -
在网上搜索了很久, 没有发现类似的报错情况
-
报错大概有两类, 第一类主要是
not declared和invalid, 看不出什么问题 -
第二类报错主要是
redefinition, 此类问题有看到类似博客- error: redefinition of template<class MatrixType, class RealScalar, class Index> 解决办法
- https://blog.csdn.net/weixin_44401286/article/details/112445309
-
根据该博客文章, 推测机器人系统中编译
orbslam3时从多处引用了sophus库, 导致了redefinition报错 -
重新分析报错信息, 发现
orbslam3编译时指定引用的是项目路径下的Thirdparty/Sophus/sophus库, 但系统中还有ROS包里之前安装的/opt/ros/melodic/include/sophus库, 导致了redefinition报错

解决
- 搜索 orbslam3 项目代码中所有引用
Thirdparty/Sophus/sophus库的地方, 如下
#include "Thirdparty/Sophus/sophus/geometry.hpp"
- 修改为直接从
ROS包里之前安装的sophus库引用, 如下
# #include "Thirdparty/Sophus/sophus/geometry.hpp"
#include "sophus/geometry.hpp"
- 修改了所有
sophus库的引用后, 重新编译即可解决问题
参考资料
- error: redefinition of template<class MatrixType, class RealScalar, class Index> 解决办法
https://blog.csdn.net/weixin_44401286/article/details/112445309



















