Monday, April 11, 2022

[SOLVED] Could NOT find Boost (missing: python3) (found version "1.76.0") - CMake Windows

Issue

I need help solving this cmake boost python3 find problem when trying to compile cv_bridge from ros2, which uses a build tool called colcon and in turn CMake. The colcon build error message:

> 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)

What I have tried:

  • Installing different versions of boost: 1.58, 1.67, 1.76
  • Adding to Boost_INCLUDE_DIRS the path to the boost libraries in the CMakeLists.txt of cv_bridge:
     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")
  • Renaming the libboost_python38-vc142-mt-gd-x64-1_76.lib to libboost_python38.lib and libboost_python3.lib
  • Compiling Boost from source with bootstrap.bat and b2 or installing with the zip file.
  • Looked for answers here and elsewhere, which led me to tried things above

I have run out of ideas, please any help will be greatly appreciated!


Solution

I was able to solve it (after a few days of suffering) using precompiled Boost 1.74 and by changing the boost/python related parts of cv_bridge/CMakeLists.txt to:

...
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)
...

Do not forget to remove build and install folders before triggering colcon build again.



Answered By - RochaLBR
Answer Checked By - Senaida (WPSolving Volunteer)