Cmake не может найти boost_python - PullRequest
3 голосов
/ 10 мая 2019

Я пытаюсь создать эту простую демонстрацию повышения Python из по этой ссылке на моей MacOS High Sierra.

Ниже приводится hello_ext.cpp:

#include <boost/python.hpp>

char const* greet()
{
  return "hello, world";
}

BOOST_PYTHON_MODULE(hello_ext)
{
  using namespace boost::python;
  def("greet", greet);
}

Ниже приводится CmakeLists.txt:

cmake_minimum_required(VERSION 3.5)

# Find python and Boost - both are required dependencies
find_package(PythonLibs 2.7 REQUIRED)
find_package(Boost COMPONENTS python REQUIRED)

# Without this, any build libraries automatically have names "lib{x}.so"
set(CMAKE_SHARED_MODULE_PREFIX "")

# Add a shared module - modules are intended to be imported at runtime.
# - This is where you add the source files
add_library(hello_ext MODULE hello_ext.cpp)

# Set up the libraries and header search paths for this target
target_link_libraries(hello_ext ${Boost_LIBRARIES} ${PYTHON_LIBRARIES})
target_include_directories(hello_ext PRIVATE ${PYTHON_INCLUDE_DIRS})

Я подумал, что мне нужно установить Python.Boost 1.69 уже был установлен, и я сделал brew install boost-python, который работал нормально.Выполнение brew list | grep 'boost' перечисляет boost и boost-python.

Но, делая cmake .. из каталога build, жалуется на следующее:

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.

Чего мне здесь не хватает?

1 Ответ

2 голосов
/ 10 мая 2019

Из этого документа :

Обратите внимание, что для компонентов Boost Python требуется суффикс версии Python (Boost 1.67 и выше), например, python36 или python27 для версий, созданных для Python 3.6 и 2.7, соответственно. Это также относится к дополнительным компонентам, использующим Python, включая mpi_python и numpy. В более ранних выпусках Boost могут использоваться суффиксы, относящиеся к распространению, такие как 2, 3 или 2.7. Они также могут использоваться в качестве суффиксов, но имейте в виду, что они не являются переносимыми.

Пример, который вы нашли, вероятно, использовал старую версию Boost. Таким образом, вам может потребоваться изменить эту строку:

find_package(Boost COMPONENTS python27 REQUIRED)
...