问题
在装了 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