1.编译方法
对于含有livox_ros_driver和livox_ros_driver2的库,我们采取这样的编译方法:
-
首先在catkin_ws/src下只编译livox_ros_driver和livox_ros_driver2:进入到livox_ros_driver2, 直接
build.sh ROS1
-
编译完成后,在catkin_ws/src加入pointlio, fastlio2,dlio, 然后再在catkin_ws下
catkin_make
, 如果仍然遇到fast_lio_msf/Pose6D.h: 没有那个文件或目录
这种情况,直接采用catkin_make -j1
, 直接能够解决问题。
2. 总结
总结:
-
遇到
fast_lio_msf/Pose6D.h: 没有那个文件或目录
我们采用 -
遇到
livox_ros_driver/CustomMsg.h:No such file and directory
,我们采用重复catkin_make
的方法来可以解决 -
遇到
livox_ros_driver2/CustomMsg.h:No such file and directory
,只能采用进入到livox_ros_driver2, 直接build.sh ROS1
方法解决,否则采用上述两个方法都会报错 -
综合上来:当我们的工作空间同时存在:算法1,算法2,livox_ros_driver和livox_ros_driver2时,要先编译livox_ros_driver和livox_ros_driver2,然后再加入算法1和算法2利用
catkin_make
才能编译成功。
3.理由
-
1.为什么先编译livox_ros_driver? 先生成livox_ros_driver_lib和livox_ros_driver2_lib, 然后加入其他算法catkin_make时才能使用这两个库,否则直接catkin_make,会先编译算法,然后编译livox_ros_driver, 此时找不到livox_ros_driver,就会报错;就算找不到livox_ros_driver,我们也可以多次编译来解决livox_ros_driver的问题,因为第2次编译可能是先编译livox_ros_driver再编译算法;但是无论编译多少遍, 总是会出现livox_ros_driver2的编译报错,造成livox_ros_driver和livox_ros_driver2和多个算法并存的时候都无法成功,此时我们就要利用
build.sh ROS1
将编译好livox_ros_driver2,然后再cakin_make+catkin_make -j1 + 多次catkin_make解决其他问题; -
2.为什么要用catkin_make -j1来解决
fast_lio_msf/Pose6D
问题? 因为catkin_make -j1
和catkin_make
最大不同是多线程和单线程,由于用catkin_make时候,编译有些cpp会用到fast_lio_msf/Pose6D
,而此时fast_lio_msf/Pose6D
没有生成就会造成报错,用catkin_make -j1
虽然慢但是单线程,所以不会存在先无后有的问题