当我试图从ros2编译cv_bridge时,我需要帮助解决这个cmake-boost-python3查找问题,ros2使用了一个名为colcon的构建工具,然后又使用了cmake。colcon构建错误消息:
> colcon build --symlink-install --merge-install
...
--- stderr: cv_bridge
CMake Error at C:/Program Files/CMake/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find Boost (missing: python3) (found version "1.76.0")
Call Stack (most recent call first):
C:/Program Files/CMake/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
C:/Program Files/CMake/share/cmake-3.22/Modules/FindBoost.cmake:2360 (find_package_handle_standard_args)
CMakeLists.txt:32 (find_package)
我尝试过的:
- 安装不同版本的boost:1.58、1.67、1.76
- 将cv_bridge的CMakeLists.txt中的Boost库的路径添加到Boost_INCLUDE_DIRS:
if(NOT ANDROID)
find_package(PythonLibs)
list(APPEND Boost_INCLUDE_DIRS "C:/Program Files/boost/boost_1_76_0")
list(APPEND Boost_INCLUDE_DIRS "C:/Program Files/boost/boost_1_76_0/stage/lib")
- 将
libboost_python38-vc142-mt-gd-x64-1_76.lib
重命名为libboost_python38.lib
和libboost_python3.lib
- 使用bootstrap.bat和b2从源代码编译Boost,或使用zip文件安装
- 在这里和其他地方寻找答案,这让我尝试了上面的事情
我已经没有主意了,请提供任何帮助,我们将不胜感激!
我在Fedora上编译ros noetic时遇到了类似的问题。它能够找到Boost 1.76.0
,所以我认为问题应该出在python组件上。我想它找不到合适的libboost_python
版本。所以当我检查图书馆时,我在这个位置找到了它:/usr/lib64/libboost_python310.so
。所以我更新了cv_bridge/CMakeLists.txt
,专门使用3.10版本:
if(NOT ANDROID)
find_package(PythonLibs)
if(PYTHONLIBS_VERSION_STRING VERSION_LESS "3.8")
# Debian Buster
find_package(Boost REQUIRED python37)
else()
# Ubuntu Focal
# Because I am using python 3.10 I updated
# this line. If you are using a version less
# than 3.8, then update the previous line
# Updated line
find_package(Boost REQUIRED python310)
endif()
else()
find_package(Boost REQUIRED)
endif()
将其设置为专门查找3.10版本解决了这个问题,我能够进行编译。
编辑:没有意识到这个问题是针对Windows平台的,但这个答案可能仍然有助于
我使用预编译的Boost 1.74并将cv_bridge/CMakeLists.txt的Boost/python相关部分更改为:
...
set(BOOST_ROOT <your/path/to/boost_1_74_0>)
find_package (Python3 REQUIRED COMPONENTS Interpreter Development)
if(NOT ANDROID)
find_package(Boost QUIET)
if(Boost_VERSION LESS 106500)
find_package(Boost REQUIRED python)
else()
# This is a bit of a hack to suppress a warning
# No header defined for python3; skipping header check
# Which should only affect Boost versions < 1.67
# Resolution for newer versions:
# https://gitlab.kitware.com/cmake/cmake/issues/16391
if (Boost_VERSION LESS 106700)
set(_Boost_PYTHON3_HEADERS "boost/python.hpp")
endif()
find_package(Boost COMPONENTS python${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR} REQUIRED)
endif()
else()
find_package(Boost REQUIRED)
endif()
find_package(sensor_msgs REQUIRED)
...
在再次触发colcon生成之前,不要忘记删除生成并安装文件夹。
我也遇到了同样的问题。我试图将lib和include文件夹显式地赋予cmake,因此库本身和我也试图将libboost_python37-vc143-mt-x64-1_78.lib重命名为libboost_prython3.lib,但这些都不起作用。
有效的方法是简单地为cmake:提供根
cmake -DBOOST_ROOT=C:\Boost ..
在我的案例中,C:\Boost
包含我使用创建的lib
和ìnclude
文件夹
.b2 --with-python -j16 --prefix=C:Boost --libdir=C:Boostlib --includedir=C:Boostinclude install