原工作空间的代码好久没运行,再次编译报错如下:
-- 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
,发现编译成功,但所存在很多警告。后续有问题再来补坑。