问题描述
编译某个库时遇到boost依赖出现如下报错,已知boost已经安装,从错误提示上来看是boost python版本不对,导致找不到python-py27库。
-- Using cmake version 3.16.3
-- Found PythonInterp: /usr/bin/python (found version "2.7.18")
-- Found PythonLibs: /usr/lib/x86_64-linux-gnu/libpython2.7.so (found version "2.7.18")
-- Could NOT find Boost: missing: python-py27 (found /usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfig.cmake (found version "1.71.0"))
CMake Error at CMakeLists.txt:167 (message):
Could not find boost libraries!
-- Configuring incomplete, errors occurred!
1.调试问题
在项目CMakeList.txt中找到类似如下语句:
find_package(Boost COMPONENTS iostreams python-py${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR} thread filesystem system thread date_time)
在find_package
该语句前面加上:
set(Boost_DEBUG ON)
2.重新编译
-- Found Boost 1.71.0 at /usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0
-- Requested configuration: QUIET COMPONENTS iostreams;python-py27;thread;filesystem;system;thread;date_time
-- BoostConfig: find_package(boost_headers 1.71.0 EXACT CONFIG QUIET HINTS /usr/lib/x86_64-linux-gnu/cmake)
-- Found boost_headers 1.71.0 at /usr/lib/x86_64-linux-gnu/cmake/boost_headers-1.71.0
-- BoostConfig: find_package(boost_iostreams 1.71.0 EXACT CONFIG QUIET HINTS /usr/lib/x86_64-linux-gnu/cmake)
-- Found boost_iostreams 1.71.0 at /usr/lib/x86_64-linux-gnu/cmake/boost_iostreams-1.71.0
-- Boost toolset is gcc9 (GNU 9.4.0)
-- Scanning /usr/lib/x86_64-linux-gnu/cmake/boost_iostreams-1.71.0/libboost_iostreams-variant*.cmake
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_iostreams-1.71.0/libboost_iostreams-variant-shared.cmake
-- [x] libboost_iostreams.so.1.71.0
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_iostreams-1.71.0/libboost_iostreams-variant-static.cmake
-- [ ] libboost_iostreams.a
-- Adding boost_iostreams dependencies: headers
-- BoostConfig: find_package(boost_python-py27 1.71.0 EXACT CONFIG QUIET HINTS /usr/lib/x86_64-linux-gnu/cmake)
-- BoostConfig: find_package(boost_thread 1.71.0 EXACT CONFIG QUIET HINTS /usr/lib/x86_64-linux-gnu/cmake)
-- Found boost_thread 1.71.0 at /usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.71.0
-- Boost toolset is gcc9 (GNU 9.4.0)
-- Scanning /usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.71.0/libboost_thread-variant*.cmake
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.71.0/libboost_thread-variant-shared.cmake
-- [x] libboost_thread.so.1.71.0
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.71.0/libboost_thread-variant-static.cmake
-- [ ] libboost_thread.a
-- Adding boost_thread dependencies: atomic;headers
-- Found boost_atomic 1.71.0 at /usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.71.0
-- Boost toolset is gcc9 (GNU 9.4.0)
-- Scanning /usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.71.0/libboost_atomic-variant*.cmake
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.71.0/libboost_atomic-variant-shared.cmake
-- [x] libboost_atomic.so.1.71.0
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.71.0/libboost_atomic-variant-static.cmake
-- [ ] libboost_atomic.a
-- Adding boost_atomic dependencies: headers
-- BoostConfig: find_package(boost_filesystem 1.71.0 EXACT CONFIG QUIET HINTS /usr/lib/x86_64-linux-gnu/cmake)
-- Found boost_filesystem 1.71.0 at /usr/lib/x86_64-linux-gnu/cmake/boost_filesystem-1.71.0
-- Boost toolset is gcc9 (GNU 9.4.0)
-- Scanning /usr/lib/x86_64-linux-gnu/cmake/boost_filesystem-1.71.0/libboost_filesystem-variant*.cmake
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_filesystem-1.71.0/libboost_filesystem-variant-shared.cmake
-- [x] libboost_filesystem.so.1.71.0
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_filesystem-1.71.0/libboost_filesystem-variant-static.cmake
-- [ ] libboost_filesystem.a
-- Adding boost_filesystem dependencies: headers
-- BoostConfig: find_package(boost_system 1.71.0 EXACT CONFIG QUIET HINTS /usr/lib/x86_64-linux-gnu/cmake)
-- Found boost_system 1.71.0 at /usr/lib/x86_64-linux-gnu/cmake/boost_system-1.71.0
-- Boost toolset is gcc9 (GNU 9.4.0)
-- Scanning /usr/lib/x86_64-linux-gnu/cmake/boost_system-1.71.0/libboost_system-variant*.cmake
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_system-1.71.0/libboost_system-variant-shared.cmake
-- [x] libboost_system.so.1.71.0
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_system-1.71.0/libboost_system-variant-static.cmake
-- [ ] libboost_system.a
-- Adding boost_system dependencies: headers
-- BoostConfig: find_package(boost_thread 1.71.0 EXACT CONFIG QUIET HINTS /usr/lib/x86_64-linux-gnu/cmake)
-- BoostConfig: find_package(boost_date_time 1.71.0 EXACT CONFIG QUIET HINTS /usr/lib/x86_64-linux-gnu/cmake)
-- Found boost_date_time 1.71.0 at /usr/lib/x86_64-linux-gnu/cmake/boost_date_time-1.71.0
-- Boost toolset is gcc9 (GNU 9.4.0)
-- Scanning /usr/lib/x86_64-linux-gnu/cmake/boost_date_time-1.71.0/libboost_date_time-variant*.cmake
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_date_time-1.71.0/libboost_date_time-variant-shared.cmake
-- [x] libboost_date_time.so.1.71.0
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_date_time-1.71.0/libboost_date_time-variant-static.cmake
-- [ ] libboost_date_time.a
-- Adding boost_date_time dependencies: headers
-- Could NOT find Boost: missing: python-py27 (found /usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfig.cmake (found version "1.71.0"))
CMake Error at CMakeLists.txt:164 (message):
Could not find boost libraries!
-- Configuring incomplete, errors occurred!
重新编译后可以发现是在/usr/lib/x86_64-linux-gnu/
路径下找不到与关键字libboost-python27
相关的动态链接库.so和静态链接库.a文件。
查找一下发现只有libboost_python38相关的库。
xuuyann@xuuyann:/usr/lib/x86_64-linux-gnu$ sudo find /usr -name "libboost_python*"
/usr/lib/x86_64-linux-gnu/libboost_python38.so.1.71.0
/usr/lib/x86_64-linux-gnu/libboost_python38.a
/usr/lib/x86_64-linux-gnu/libboost_python38.so
/usr/lib/x86_64-linux-gnu/cmake/boost_python-1.71.0/libboost_python-variant-static-py3.8.cmake
/usr/lib/x86_64-linux-gnu/cmake/boost_python-1.71.0/libboost_python-variant-shared-py3.8.cmake
问题原因在于,我默认安装sudo apt-get install -y --no-install-recommends libboost-all-dev libboost-python-dev
库里导致只有python38的版本。
解决方法
1.python2版本的boost-python安装
linux下安装boost python详解
2.修改项目CMakeList.txt文件,将boost路径修改为本地安装路径,按照实际情况在最前面加上如下语句:
set(boost_DIR /usr/local/lib/cmake/Boost-1.71.0/)
set(BOOST_INCLUDE_DIRS /usr/local/include/boost/)
set(BOOST_INCLUDEDIR /usr/local/include/boost/)
set(BOOST_PYTHON_DIR /usr/local/lib/cmake/boost_python-1.71.0/)
3.将项目CMakeList.txt文件中的语句
find_package(Boost COMPONENTS iostreams python-py${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR} thread filesystem system thread date_time)
修改为
find_package(Boost COMPONENTS iostreams python thread filesystem system thread date_time)
4.重新编译,成功!
-- Using cmake version 3.16.3
-- Found Boost 1.71.0 at /usr/local/lib/cmake/Boost-1.71.0
-- Requested configuration: QUIET COMPONENTS iostreams;python;thread;filesystem;system;thread;date_time
-- BoostConfig: find_package(boost_headers 1.71.0 EXACT CONFIG QUIET HINTS /usr/local/lib/cmake)
-- Found boost_headers 1.71.0 at /usr/local/lib/cmake/boost_headers-1.71.0
-- BoostConfig: find_package(boost_iostreams 1.71.0 EXACT CONFIG QUIET HINTS /usr/local/lib/cmake)
-- Found boost_iostreams 1.71.0 at /usr/lib/x86_64-linux-gnu/cmake/boost_iostreams-1.71.0
-- Boost toolset is gcc9 (GNU 9.4.0)
-- Scanning /usr/lib/x86_64-linux-gnu/cmake/boost_iostreams-1.71.0/libboost_iostreams-variant*.cmake
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_iostreams-1.71.0/libboost_iostreams-variant-shared.cmake
-- [x] libboost_iostreams.so.1.71.0
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_iostreams-1.71.0/libboost_iostreams-variant-static.cmake
-- [ ] libboost_iostreams.a
-- Adding boost_iostreams dependencies: headers
-- BoostConfig: find_package(boost_python 1.71.0 EXACT CONFIG QUIET HINTS /usr/local/lib/cmake)
-- Found boost_python 1.71.0 at /usr/local/lib/cmake/boost_python-1.71.0
-- Boost toolset is gcc9 (GNU 9.4.0)
-- Scanning /usr/local/lib/cmake/boost_python-1.71.0/libboost_python-variant*.cmake
-- Including /usr/local/lib/cmake/boost_python-1.71.0/libboost_python-variant-shared-py2.7.cmake
-- [x] libboost_python27.so.1.71.0
-- Including /usr/local/lib/cmake/boost_python-1.71.0/libboost_python-variant-static-py2.7.cmake
-- [ ] libboost_python27.a
-- Adding boost_python dependencies: headers
-- BoostConfig: find_package(boost_thread 1.71.0 EXACT CONFIG QUIET HINTS /usr/local/lib/cmake)
-- Found boost_thread 1.71.0 at /usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.71.0
-- Boost toolset is gcc9 (GNU 9.4.0)
-- Scanning /usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.71.0/libboost_thread-variant*.cmake
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.71.0/libboost_thread-variant-shared.cmake
-- [x] libboost_thread.so.1.71.0
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.71.0/libboost_thread-variant-static.cmake
-- [ ] libboost_thread.a
-- Adding boost_thread dependencies: atomic;headers
-- Found boost_atomic 1.71.0 at /usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.71.0
-- Boost toolset is gcc9 (GNU 9.4.0)
-- Scanning /usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.71.0/libboost_atomic-variant*.cmake
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.71.0/libboost_atomic-variant-shared.cmake
-- [x] libboost_atomic.so.1.71.0
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.71.0/libboost_atomic-variant-static.cmake
-- [ ] libboost_atomic.a
-- Adding boost_atomic dependencies: headers
-- BoostConfig: find_package(boost_filesystem 1.71.0 EXACT CONFIG QUIET HINTS /usr/local/lib/cmake)
-- Found boost_filesystem 1.71.0 at /usr/lib/x86_64-linux-gnu/cmake/boost_filesystem-1.71.0
-- Boost toolset is gcc9 (GNU 9.4.0)
-- Scanning /usr/lib/x86_64-linux-gnu/cmake/boost_filesystem-1.71.0/libboost_filesystem-variant*.cmake
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_filesystem-1.71.0/libboost_filesystem-variant-shared.cmake
-- [x] libboost_filesystem.so.1.71.0
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_filesystem-1.71.0/libboost_filesystem-variant-static.cmake
-- [ ] libboost_filesystem.a
-- Adding boost_filesystem dependencies: headers
-- BoostConfig: find_package(boost_system 1.71.0 EXACT CONFIG QUIET HINTS /usr/local/lib/cmake)
-- Found boost_system 1.71.0 at /usr/lib/x86_64-linux-gnu/cmake/boost_system-1.71.0
-- Boost toolset is gcc9 (GNU 9.4.0)
-- Scanning /usr/lib/x86_64-linux-gnu/cmake/boost_system-1.71.0/libboost_system-variant*.cmake
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_system-1.71.0/libboost_system-variant-shared.cmake
-- [x] libboost_system.so.1.71.0
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_system-1.71.0/libboost_system-variant-static.cmake
-- [ ] libboost_system.a
-- Adding boost_system dependencies: headers
-- BoostConfig: find_package(boost_thread 1.71.0 EXACT CONFIG QUIET HINTS /usr/local/lib/cmake)
-- BoostConfig: find_package(boost_date_time 1.71.0 EXACT CONFIG QUIET HINTS /usr/local/lib/cmake)
-- Found boost_date_time 1.71.0 at /usr/lib/x86_64-linux-gnu/cmake/boost_date_time-1.71.0
-- Boost toolset is gcc9 (GNU 9.4.0)
-- Scanning /usr/lib/x86_64-linux-gnu/cmake/boost_date_time-1.71.0/libboost_date_time-variant*.cmake
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_date_time-1.71.0/libboost_date_time-variant-shared.cmake
-- [x] libboost_date_time.so.1.71.0
-- Including /usr/lib/x86_64-linux-gnu/cmake/boost_date_time-1.71.0/libboost_date_time-variant-static.cmake
-- [ ] libboost_date_time.a
-- Adding boost_date_time dependencies: headers
-- found boost version: 1.71.0 at /usr/local/include
-- Configuring done
-- Generating done