Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Finding boost-python3 with Anaconda cmake prefix

DLDR How do I point the cmake at boost-python3 library? It is not automatically detected by cmake.


I'm trying to build caffe for Python 3.6 using the provided cmake.

My system specs:

  • Python 3.6.5, Anaconda custom (64-bit)
  • Mac OS 10.13.6
  • No CUDA

I've installing boost with brew, e.g.

brew install boost boost-python3

I can see the boost libraries using find / -name libboost* 2>/dev/null. They occur in three directories

  1. /usr/local/Cellar/boost/1.67.0_1/lib/
  2. /usr/local/lib/ -> symlink to above
  3. boost-python3 is in /usr/local/Cellar/boost-python/1.67.0/lib/

If I run cmake -DCMAKE_PREFIX_PATH=<anaconda_env_path> -D python_version=3, I get this at the top of the output

-- Boost version: 1.67.0
-- Found the following Boost libraries:
--   system
--   thread
--   filesystem
--   chrono
--   date_time
--   atomic

But further down, I also get

CMake Warning at /Users/Mauceri/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1723 (message):
  No header defined for python-py365; skipping header check
Call Stack (most recent call first):
  cmake/Dependencies.cmake:157 (find_package)
  CMakeLists.txt:49 (include)


-- Could NOT find Boost
CMake Warning at /Users/Mauceri/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1723 (message):
  No header defined for python-py36; skipping header check
Call Stack (most recent call first):
  cmake/Dependencies.cmake:164 (find_package)
  CMakeLists.txt:49 (include)


-- Could NOT find Boost
CMake Warning at /Users/Mauceri/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1723 (message):
  No header defined for python-py3; skipping header check
Call Stack (most recent call first):
  cmake/Dependencies.cmake:164 (find_package)
  CMakeLists.txt:49 (include)

-- Could NOT find Boost
-- Could NOT find Boost
-- Python interface is disabled or not all required dependencies found. Building without it...

Similar to Cmake doesn't find Boost, I have tried adding

-DBOOST_ROOT=/usr/local/Cellar/boost/1.67.0_1/lib/ -DBoost_DEBUG=1

to the cmake command. In the resulting output, the following repeats three times with boost_python-py365, boost_python-py36, boost_python-py3, and boost_python:

[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1121 ] _boost_TEST_VERSIONS = 1.67.0;1.67;1.66.0;1.66;1.65.1;1.65.0;1.65;1.64.0;1.64;1.63.0;1.63;1.62.0;1.62;1.61.0;1.61;1.60.0;1.60;1.59.0;1.59;1.58.0;1.58;1.57.0;1.57;1.56.0;1.56;1.55.0;1.55;1.54.0;1.54;1.53.0;1.53;1.52.0;1.52;1.51.0;1.51;1.50.0;1.50;1.49.0;1.49;1.48.0;1.48;1.47.0;1.47;1.46.1;1.46.0;1.46
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1123 ] Boost_USE_MULTITHREADED = TRUE
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1125 ] Boost_USE_STATIC_LIBS = 
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1127 ] Boost_USE_STATIC_RUNTIME = 
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1129 ] Boost_ADDITIONAL_VERSIONS = 
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1131 ] Boost_NO_SYSTEM_PATHS = 
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1199 ] Declared as CMake or Environmental Variables:
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1201 ]   BOOST_ROOT = /usr/local/Cellar/boost/1.67.0_1/include/
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1203 ]   BOOST_INCLUDEDIR = 
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1205 ]   BOOST_LIBRARYDIR = 
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1207 ] _boost_TEST_VERSIONS = 1.67.0;1.67;1.66.0;1.66;1.65.1;1.65.0;1.65;1.64.0;1.64;1.63.0;1.63;1.62.0;1.62;1.61.0;1.61;1.60.0;1.60;1.59.0;1.59;1.58.0;1.58;1.57.0;1.57;1.56.0;1.56;1.55.0;1.55;1.54.0;1.54;1.53.0;1.53;1.52.0;1.52;1.51.0;1.51;1.50.0;1.50;1.49.0;1.49;1.48.0;1.48;1.47.0;1.47;1.46.1;1.46.0;1.46
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1306 ] location of version.hpp: /usr/local/Cellar/boost/1.67.0_1/include/boost/version.hpp
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1330 ] version.hpp reveals boost 1.67.0
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1416 ] guessed _boost_COMPILER = 
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1426 ] _boost_MULTITHREADED = -mt
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1502 ] _boost_RELEASE_ABI_TAG = -
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1504 ] _boost_DEBUG_ABI_TAG = -d
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1567 ] _boost_LIBRARY_SEARCH_DIRS_RELEASE = /usr/local/Cellar/boost/1.67.0_1/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH_boost_LIBRARY_SEARCH_DIRS_DEBUG   = /usr/local/Cellar/boost/1.67.0_1/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1756 ] Searching for PYTHON_LIBRARY_RELEASE: boost_python-mt-1_67;boost_python-mt;boost_python
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:400 ]  Boost_LIBRARY_DIR_RELEASE = /usr/local/Cellar/boost/1.67.0_1/lib _boost_LIBRARY_SEARCH_DIRS_RELEASE = /usr/local/Cellar/boost/1.67.0_1/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1809 ] Searching for PYTHON_LIBRARY_DEBUG: boost_python-mt-d-1_67;boost_python-mt-d;boost_python-mt;boost_python
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:400 ]  Boost_LIBRARY_DIR_DEBUG = /usr/local/Cellar/boost/1.67.0_1/lib _boost_LIBRARY_SEARCH_DIRS_DEBUG = /usr/local/Cellar/boost/1.67.0_1/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
[ /Users/me/anaconda/share/cmake-3.11/Modules/FindBoost.cmake:1883 ] Boost_FOUND = 1
Could NOT find Boost
Boost version: 1.67.0
Boost include path: /usr/local/Cellar/boost/1.67.0_1/include
Could not find the following Boost libraries:
        boost_python
No Boost libraries were found. You may need to set BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT to the location of Boost.

Therefore, I think the boost-python path is what is missing. I also tried adding -DBOOST_LIBRARYDIR, but that didn't seem to change anything.

The FindBoost documentation contains this comment about boost-python

Note that Boost Python components require a Python version suffix (Boost 1.67 and later), e.g. python36 or python27 for the versions built against Python 3.6 and 2.7, respectively. This also applies to additional components using Python including mpi_python and numpy. Earlier Boost releases may use distribution-specific suffixes such as 2, 3 or 2.7. These may also be used as suffixes, but note that they are not portable.

I noticed that the boost-python3 libraries had the suffix 37 (libboost_python37.a), so I also tried using an anaconda environment with python 3.7, but the same errors persisted.

How can I get my cmake to find the boost-python3 libraries?

like image 207
Cecilia Avatar asked Oct 16 '18 18:10

Cecilia


People also ask

How do I find boost in CMake?

If boost is not installed in a default location and can, thus, not be found by CMake, you can tell CMake where to look for boost like this: SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/win32libs/boost") SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/win32libs/boost/lib")

What version of CMake do you use to find Python?

With CMake 3.12 FindPython2 and FindPython3 were introduced. That reworked the whole handling of finding Python and also improved the support for Anaconda. If possible, use the newest CMake version available to you. Show activity on this post.

Is it possible to read Jenkins Boost version in CMake?

Actually, the file include/boost/version.hpp could not be read (by the cmake script launched by jenkins). I had to manually change the permission of the (boost) library (even though jenkins belongs to the group, but that is another problem linked to jenkins that I could not figure out):

What distribution suffixes does boost use for Python components?

This also applies to additional components using Python including mpi_python and numpy. Earlier Boost releases may use distribution-specific suffixes such as 2, 3 or 2.7.


1 Answers

With CMake 3.12 FindPython2 and FindPython3 were introduced. That reworked the whole handling of finding Python and also improved the support for Anaconda.

As you are using Boost 1.67, I would advice you to switch to CMake 3.12 or newer anyway: https://stackoverflow.com/a/42124857/2799037

If possible, use the newest CMake version available to you.

like image 126
usr1234567 Avatar answered Oct 19 '22 21:10

usr1234567