从源码安装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
相关产品推荐
相关产品推荐

