Не удалось найти PythonLibs, anaconda3 - PullRequest
1 голос
/ 25 сентября 2019

ОРИГИНАЛЬНЫЙ ПОСТ:

Я пытаюсь скомпилировать простой «привет мир» для вызова из python (anaconda3), выполненный с использованием CMake.

Я получаю:

Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)

hello.cpp:

#include <boost/python.hpp>
#include <string>

std::string greet(std::string name){
    return std::string("Hello, ") + name;
}

BOOST_PYTHON_MODULE(hello){
    using namespace boost::python;
    def("greet", greet, "Prepends a greeting to the passed name");
}

CMakeLists.txt:

cmake_minimum_required(VERSION 3.0)
find_package(PythonLibs 3 REQUIRED)

set(BOOST_PYTHONLIB python-py36)
find_package(Boost COMPONENTS ${BOOST_PYTHONLIB})

python_add_module(hello hello.cpp)
target_include_directories(hello PUBLIC ${Boost_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS})
target_link_libraries(hello ${Boost_LIBRARIES} ${PYTHON_LIBRARIES})

К сожалению, я пытаюсь использовать anaconda3, поэтому на основе некоторых других сообщений я добавилследующие аргументы, когда вызывается CMake:

-DPYTHON_LIBRARY=/Users/chris/anaconda3/lib
-DPYTHON_INCLUDE_DIR=/Users/chris/anaconda3/include

Но я получаю ту же ошибку с этими аргументами или без них.Я все еще относительно новичок в этом, поэтому извиняюсь, если это что-то тривиальное.

Я использую Mojave 10.14.6 и делаю это через CLion.

ОБНОВЛЕНИЕ:

Как предлагается в этом сообщении, редактирование пакета находит в

FIND_PACKAGE(PythonInterp 3)
FIND_PACKAGE(PythonLibs 3)

Кажется, что помогает - он находит PythonLibs, но не правильный.

Could NOT find PythonLibs: Found unsuitable version "2.7.10", but required is at least "3" (found /usr/lib/libpython2.7.dylib)

Я знаю, что могу (в принципе) сделать:

set(PYTHON_LIBRARIES /Users/chris/anaconda3/lib/libpython3.6m.dylib)

Как обсуждено в комментариях, в котором найдена правильная библиотека, но, как обсуждалось в предыдущем посте, позже выдает мне ошибкуUnknown CMake command "PYTHON_ADD_MODULE".

Согласно этому посту, «причина этого, по-видимому, в том, что эта функция предоставляется FindPythonLibs.cmake, которая загружается с помощью find_package (Pythonlibs) и, следовательно, если она не используется для размещенияPythonLibs, эта функция не может быть вызвана ".

Итак, похоже, что путь к /Users/chris/anaconda3/lib/libpython3.6m.dylib должен быть каким-то образом добавлен в поиск FindPackage ().Кто-нибудь знает, как это сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...