2025年8月

1、在CMakeLists.txt中经常用到: add_subdirectory(),单独编译子模块,

    但是主模块经常依赖子模块的编译结果,通常为库,此时如果用make  -j8 并行编译方式,很可能出现编译错误,

原因就是主模块、子模块并行编译,当主模块先完成编译去链接子模块的库时,找不到目标库,而出现链接失败。



2、解决方法

        add_dependencies() 对主模块的目标添加子模块的目标作为依赖,这样就能保证子模块优先主模块编译,例子如下:



add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/livox_ros_driver/)

add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/ceres-solver-2.0.0/)

add_dependencies(li_init  livox_sdk_static  ceres  )  #控制CMake编译顺序,解决库依赖问题


li_init: 主模块的目标,add_executable(li_init,src/laserMapping.cpp...)

livox_sdk_static: 子模块1的目标, 在子目录下的CMakeLists.txt中可以找到: add_library(${SDK_LIBRARY} STATIC "")

ceres: 子模块2的目标,在子目录下的CMakeLists.txt中可以找到: add_library(ceres STATIC "")






1、 Dear ImGui

    Bloat-free Graphical User interface for C++ with minimal dependencies

2、github

     https://github.com/ocornut/imgui

一、错误现象

在docker内运行速腾激光雷达驱动程序时,出现错误: ERRCODE_MSOPTIMEOUT






二、问题原因

    对于速腾激光雷达驱动程序,在激光雷达端配置了详细的参数,最主要的就是激光雷达的IP和PC机的IP,一旦配置完成,

那PC机的实际IP必须与激光雷达里配置的Host IP一致,否则PC端收不到点云数据.


而docker共有4中网络模式((Bridge,Host,Container,None)),且默认为桥接模式,桥接模式将Docker网络与Host网络通过虚拟网桥隔离,从而导致不满足执行驱动程序的PC环境IP不等于激光雷达配置的PC IP.









二、解决办法

     进入docker时,指定网络模式为host模式:--net=host,此时docker与host共享网络设备,此时用ifconfig分别查看docker和host的网络设备,发现docker内的网络设备及IP地址与Host端的一致!

docker run -it  --net=host --rm --privileged -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v "$MOUNT_HOST_DIR":$MOUNT_DOCKER_DIR --name $MOUNT_DOCKER_NAME $DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG_NAME  /bin/bash