问题产生:最近由于测试相机,装了一堆厂商要求的乱七八糟的库
问题:编译pcl有依赖的库,发现存在boost报错
Could not find the following Boost libraries:
boost_iostreams
boost_serialization
有两个憨憨找不到。
解决方案:1、没安装boost,安装
2、安装了找不到,让它找到。找不到的原因可能是因为路径、也可能是因为版本
===============================================================
具体调试过程:
1、在.cmake文件,打开pcl的boost调试
sudo gedit /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)
在find前面加一句
set(Boost_DEBUG ON)
2、重新编译一下
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:1507 ] _boost_LIBRARY_SEARCH_DIRS_RELEASE = /usr/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH_boost_LIBRARY_SEARCH_DIRS_DEBUG = /usr/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:1657 ] Searching for SYSTEM_LIBRARY_RELEASE: boost_system-gcc7-mt-1_65_1;boost_system-gcc7-mt;boost_system-mt-1_65_1;boost_system-mt;boost_system
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:380 ] Boost_LIBRARY_DIR_RELEASE = /usr/lib _boost_LIBRARY_SEARCH_DIRS_RELEASE = /usr/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:1708 ] Searching for SYSTEM_LIBRARY_DEBUG: boost_system-gcc7-mt-d-1_65_1;boost_system-gcc7-mt-d;boost_system-mt-d-1_65_1;boost_system-mt-d;boost_system-mt;boost_system
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:380 ] Boost_LIBRARY_DIR_DEBUG = /usr/lib _boost_LIBRARY_SEARCH_DIRS_DEBUG = /usr/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:1657 ] Searching for FILESYSTEM_LIBRARY_RELEASE: boost_filesystem-gcc7-mt-1_65_1;boost_filesystem-gcc7-mt;boost_filesystem-mt-1_65_1;boost_filesystem-mt;boost_filesystem
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:380 ] Boost_LIBRARY_DIR_RELEASE = /usr/lib _boost_LIBRARY_SEARCH_DIRS_RELEASE = /usr/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:1708 ] Searching for FILESYSTEM_LIBRARY_DEBUG: boost_filesystem-gcc7-mt-d-1_65_1;boost_filesystem-gcc7-mt-d;boost_filesystem-mt-d-1_65_1;boost_filesystem-mt-d;boost_filesystem-mt;boost_filesystem
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:380 ] Boost_LIBRARY_DIR_DEBUG = /usr/lib _boost_LIBRARY_SEARCH_DIRS_DEBUG = /usr/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:1657 ] Searching for DATE_TIME_LIBRARY_RELEASE: boost_date_time-gcc7-mt-1_65_1;boost_date_time-gcc7-mt;boost_date_time-mt-1_65_1;boost_date_time-mt;boost_date_time
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:380 ] Boost_LIBRARY_DIR_RELEASE = /usr/lib _boost_LIBRARY_SEARCH_DIRS_RELEASE = /usr/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:1708 ] Searching for DATE_TIME_LIBRARY_DEBUG: boost_date_time-gcc7-mt-d-1_65_1;boost_date_time-gcc7-mt-d;boost_date_time-mt-d-1_65_1;boost_date_time-mt-d;boost_date_time-mt;boost_date_time
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:380 ] Boost_LIBRARY_DIR_DEBUG = /usr/lib _boost_LIBRARY_SEARCH_DIRS_DEBUG = /usr/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:1657 ] Searching for IOSTREAMS_LIBRARY_RELEASE: boost_iostreams-gcc7-mt-1_65_1;boost_iostreams-gcc7-mt;boost_iostreams-mt-1_65_1;boost_iostreams-mt;boost_iostreams
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:380 ] Boost_LIBRARY_DIR_RELEASE = /usr/lib _boost_LIBRARY_SEARCH_DIRS_RELEASE = /usr/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:1708 ] Searching for IOSTREAMS_LIBRARY_DEBUG: boost_iostreams-gcc7-mt-d-1_65_1;boost_iostreams-gcc7-mt-d;boost_iostreams-mt-d-1_65_1;boost_iostreams-mt-d;boost_iostreams-mt;boost_iostreams
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:380 ] Boost_LIBRARY_DIR_DEBUG = /usr/lib _boost_LIBRARY_SEARCH_DIRS_DEBUG = /usr/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:1657 ] Searching for SERIALIZATION_LIBRARY_RELEASE: boost_serialization-gcc7-mt-1_65_1;boost_serialization-gcc7-mt;boost_serialization-mt-1_65_1;boost_serialization-mt;boost_serialization
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:380 ] Boost_LIBRARY_DIR_RELEASE = /usr/lib _boost_LIBRARY_SEARCH_DIRS_RELEASE = /usr/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:1708 ] Searching for SERIALIZATION_LIBRARY_DEBUG: boost_serialization-gcc7-mt-d-1_65_1;boost_serialization-gcc7-mt-d;boost_serialization-mt-d-1_65_1;boost_serialization-mt-d;boost_serialization-mt;boost_serialization
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:380 ] Boost_LIBRARY_DIR_DEBUG = /usr/lib _boost_LIBRARY_SEARCH_DIRS_DEBUG = /usr/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:1657 ] Searching for REGEX_LIBRARY_RELEASE: boost_regex-gcc7-mt-1_65_1;boost_regex-gcc7-mt;boost_regex-mt-1_65_1;boost_regex-mt;boost_regex
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:380 ] Boost_LIBRARY_DIR_RELEASE = /usr/lib _boost_LIBRARY_SEARCH_DIRS_RELEASE = /usr/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:1708 ] Searching for REGEX_LIBRARY_DEBUG: boost_regex-gcc7-mt-d-1_65_1;boost_regex-gcc7-mt-d;boost_regex-mt-d-1_65_1;boost_regex-mt-d;boost_regex-mt;boost_regex
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:380 ] Boost_LIBRARY_DIR_DEBUG = /usr/lib _boost_LIBRARY_SEARCH_DIRS_DEBUG = /usr/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
-- [ /usr/share/cmake-3.10/Modules/FindBoost.cmake:1783 ] Boost_FOUND = 1
-- Could NOT find Boost
Boost version: 1.65.1
Boost include path: /usr/include
Could not find the following Boost libraries:
boost_iostreams
boost_serialization
Some (but not all) of the required Boost libraries were found. You may need to install these additional Boost libraries. Alternatively, set BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT to the location of 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:355 (pcl_report_not_found)
/usr/local/share/pcl-1.11/PCLConfig.cmake:537 (find_external_library)
可以发现pcl找到了部分boost的依赖,仔细观察一下,所有库的搜寻路径是
Boost_LIBRARY_DIR_DEBUG = /usr/lib
现在可以肯定 usr/lib中没有这两个库
3、对比一下能找到的库和找不到的库
sudo find / -name "libboost_filesystem*"
sudo find /usr -name "libboost_iostream*"
a@computer:~$ sudo find /usr -name "libboost_filesystem*"
[sudo] smz 的密码:
/usr/lib/libboost_filesystem.so.1
/usr/lib/libboost_filesystem.so.1.72
/usr/lib/libboost_filesystem.so.1.72.0
/usr/lib/x86_64-linux-gnu/libboost_filesystem.a
/usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.65.1
/usr/lib/x86_64-linux-gnu/libboost_filesystem.so
/usr/lib/libboost_filesystem.so
/usr/local/cuda-10.2/nsight-systems-2019.5.2/host-linux-x64/libboost_filesystem.so.1.64.0
a@computer:~$ sudo find /usr -name "libboost_iostream*"
/usr/lib/x86_64-linux-gnu/libboost_iostreams.so.1.62.0
/usr/lib/x86_64-linux-gnu/libboost_iostreams.so
/usr/lib/x86_64-linux-gnu/libboost_iostreams.a
/usr/lib/x86_64-linux-gnu/libboost_iostreams.so.1.65.1
/usr/local/cuda-10.2/nsight-systems-2019.5.2/host-linux-x64/libboost_iostreams.so.1.64.0
可以非常清晰的看到搜索路径/usr/lib中没有iostream,但是有filesystem。 (也可以清晰地看到我电脑库的版本有问题。。)
4、建立软连接
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_iostreams.so /usr/lib/libboost_iostreams.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_serialization.so /usr/lib/libboost_serialization.so
把找不到的两个库从安装路径软连接过去即可。