You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从源码安装Boost 1.81.0后,Catkin构建ROS包依赖异常求助

解决ROS编译时优先使用自定义Boost库的问题

问题根源

LD_LIBRARY_PATH是运行时动态库加载路径,编译阶段CMake不会参考它。你的问题是CMake在配置阶段就缓存了系统默认Boost(1.71.0)的路径,需要从CMake层面强制指定自定义Boost(1.81.0)的位置。

解决方案

1. 清理旧构建缓存(必须步骤)

先删除之前的构建缓存,避免CMake复用旧配置:

# 进入ROS工作空间
cd ~/ros1_ws/pacbot_ws
# 删除build和devel目录
rm -rf build devel

2. 方法一:全局强制所有ROS包使用自定义Boost

编译时通过CMake参数直接指定Boost根目录,禁止系统路径查找:

  • 用catkin_make的话:
catkin_make -DBOOST_ROOT=/usr/local -DBoost_NO_SYSTEM_PATHS=ON -DBoost_USE_STATIC_LIBS=OFF
  • 用catkin build的话:
catkin build --cmake-args -DBOOST_ROOT=/usr/local -DBoost_NO_SYSTEM_PATHS=ON -DBoost_USE_STATIC_LIBS=OFF

参数说明:

  • BOOST_ROOT=/usr/local:指定你的Boost安装根目录(源码安装默认是/usr/local)
  • Boost_NO_SYSTEM_PATHS=ON:禁止CMake查找系统默认的Boost路径
  • Boost_USE_STATIC_LIBS=OFF:使用动态库(和系统默认一致,避免链接错误)

3. 方法二:针对单个包修改CMakeLists.txt

如果只想让特定包(比如abb_robot_cpp_utilities)使用自定义Boost,找到该包的CMakeLists.txt,修改find_package(Boost)的语句:

# 替换原有的find_package(Boost ...)
set(BOOST_ROOT /usr/local)
set(Boost_NO_SYSTEM_PATHS ON)
set(Boost_USE_STATIC_LIBS OFF)
find_package(Boost REQUIRED COMPONENTS chrono ...) # 这里的components要和原包需求一致,比如chrono、thread等

修改后重新编译该包:

catkin build abb_robot_cpp_utilities

4. 验证是否生效

编译完成后,检查生成的库是否链接到自定义Boost:

ldd ~/ros1_ws/pacbot_ws/devel/.private/abb_robot_cpp_utilities/lib/libabb_robot_cpp_utilities.so | grep boost

输出如果显示/usr/local/lib/libboost_chrono.so.1.81.0则说明成功。

内容的提问来源于stack exchange,提问作者Bilal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:55:42