解决Could NOT find Boost 或 Could NOT find Boost(missing:thread date_time iostreams serialization)的思路

本文记录了解决PCL配置过程中出现的Boost链接错误的过程。通过检查Boost安装状态、调整PCL配置文件及创建软链接等步骤,最终解决了编译错误。

原工作空间的代码好久没运行,再次编译报错如下:

-- Could NOT find Boost
CMake Error at /usr/local/share/pcl-1.11/PCLConfig.cmake:59 (message):
  common is required but boost was not found
Call Stack (most recent call first):
  /usr/local/share/pcl-1.11/PCLConfig.cmake:354 (pcl_report_not_found)
  /usr/local/share/pcl-1.11/PCLConfig.cmake:536 (find_external_library)
  navxxxxxx/CMakeLists.txt:33 (find_package)


-- Configuring incomplete, errors occurred!
See also "/home/xxx/example_ws/build/CMakeFiles/CMakeOutput.log".
Makefile:2070: recipe for target 'cmake_check_build_system' failed
make: *** [cmake_check_build_system] Error 1
Invoking "make cmake_check_build_system" failed

第一步,是否没装boost? 经过查看

 dpkg -S /usr/include/boost/version.hpp 

发现boost已装,且版本为libboost1.65-dev:amd64
第二步,PCL库没有链接上boost?卸载重装了PCL-1.11,编译并没有解决问题;
第三步,在某帖子看到说可能cmake版本过低,就从3.10升级到3.24【推测这一步不需要】;
再次编译,发现新报错Could NOT find Boost(missing:thread date_time iostreams serialization),参考boost库依赖报错,获得思路:
第四步,在/usr/local/share/pcl-1.11/PCLConfig.cmake

set(Boost_NO_BOOST_CMAKE ON)
find_package(Boost 1.55.0 ${QUIET_} COMPONENTS system filesystem date_time iostreams serialization)

前面加入set(Boost_DEBUG ON);【推测这一步不需要】
第五步,重新编译,终端显示很多类似如下的代码:

Boost_LIBRARY_DIR_DEBUG =/opt/ros/melodic/lib

说明在路径中/opt/ros/melodic/lib中的boost无法链接thread date_time iostreams serialization,经过依次使用命令

locate libboost_iostreams.so
locate libboost_serialization.so
locate libboost_date_time.so
locate libboost_thread.so

搜索,系统中确实存在libboost_iostreams.so,libboost_serialization.so,libboost_date_time.so,libboost_thread.so,且路径在/usr/lib/x86_64-linux-gnu,那么存在的问题是动态库存在,boost链接不上。
第六步,建立boost与动态库之间的软链接:

sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_date_time.a /opt/ros/melodic/lib/libboost_date_time.a
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_iostreams.so /opt/ros/melodic/lib/libboost_iostreams.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_thread.so /opt/ros/melodic/lib/libboost_thread.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_serialization.so /opt/ros/melodic/lib/libboost_serialization.so

再次catkin_make,发现编译成功,但所存在很多警告。后续有问题再来补坑。

CMake报错 `Could NOT find Boost (missing: filesystem thread date_time iostreams system)` 通常是由以下几种原因导致的: ### Boost库未安装 若系统中没有安装 Boost 库,CMake 自然无法找到它。需确认系统已经正确安装了 Boost 库,并且安装路径包含所需的组件(filesystem、threaddate_timeiostreams、system)。 ### 库路径配置问题 CMake 可能没有找到 Boost 库的路径。在 CMake 脚本中设置正确的库路径和包含路径,例如: ```cmake set(Boost_INCLUDE_DIR "/path/to/boost/include") set(Boost_LIBRARY_DIR "/path/to/boost/lib") find_package(Boost REQUIRED COMPONENTS filesystem thread date_time iostreams system) ``` ### 版本不兼容 CMake 要求的 Boost 版本与系统中安装的版本不兼容。在 `find_package` 命令中可以指定所需的 Boost 版本,例如: ```cmake find_package(Boost 1.70.0 REQUIRED COMPONENTS filesystem thread date_time iostreams system) ``` ### 静态库和动态库设置问题 CMake 对静态库和动态库的使用有不同的设置。若使用静态库,需要设置 `Boost_USE_STATIC_LIBS` 为 `ON`;若使用动态库,则设置为 `OFF`。示例如下: ```cmake set(Boost_USE_STATIC_LIBS ON) # 使用静态库 find_package(Boost REQUIRED COMPONENTS filesystem thread date_time iostreams system) ``` ### CMake 模块问题 CMake 自带的 `FindBoost.cmake` 模块可能存在问题。可以尝试更新 CMake 到最新版本,者手动指定 `FindBoost.cmake` 模块的路径。 ### 环境变量问题 系统的环境变量可能没有正确配置。例如,在 Windows 系统中,需要设置 `BOOST_ROOT` 环境变量为 Boost 库的根目录。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值