找不到 Boost(缺少:python3)(找到版本“1.76.0”)-CMake Windows
Could NOT find Boost (missing: python3) (found version "1.76.0") - CMake Windows
我需要帮助解决这个 cmake boost python3 在尝试编译 cv_bridge from ros2, which uses a build tool called 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 文件安装。
- 在这里和其他地方寻找答案,这让我尝试了上面的事情
我有 运行 个想法,请提供任何帮助,我们将不胜感激!
我能够使用 precompiled 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 构建之前,不要忘记删除构建和安装文件夹。
我在 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 平台的,但这个答案可能仍然有帮助
我遇到了同样的问题。我试图将 lib 和包含文件夹明确地提供给 cmake,因此作为库本身,我也尝试将 libboost_python37-vc143-mt-x64-1_78.lib 重命名为 libboost_python3.lib 但这些都不起作用。
有效的方法是简单地向 cmake 提供根目录:
cmake -DBOOST_ROOT=C:\Boost ..
在我的例子中 C:\Boost
包含我使用以下方法创建的 lib
和 ìnclude
文件夹:
.\b2 --with-python -j16 --prefix=C:\Boost --libdir=C:\Boost\lib --includedir=C:\Boost\include install
我需要帮助解决这个 cmake boost python3 在尝试编译 cv_bridge from ros2, which uses a build tool called 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 文件安装。
- 在这里和其他地方寻找答案,这让我尝试了上面的事情
我有 运行 个想法,请提供任何帮助,我们将不胜感激!
我能够使用 precompiled 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 构建之前,不要忘记删除构建和安装文件夹。
我在 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 平台的,但这个答案可能仍然有帮助
我遇到了同样的问题。我试图将 lib 和包含文件夹明确地提供给 cmake,因此作为库本身,我也尝试将 libboost_python37-vc143-mt-x64-1_78.lib 重命名为 libboost_python3.lib 但这些都不起作用。
有效的方法是简单地向 cmake 提供根目录:
cmake -DBOOST_ROOT=C:\Boost ..
在我的例子中 C:\Boost
包含我使用以下方法创建的 lib
和 ìnclude
文件夹:
.\b2 --with-python -j16 --prefix=C:\Boost --libdir=C:\Boost\lib --includedir=C:\Boost\include install