2016-08-26 2 views
1

Попытка простейший пример Hello World от Boost Python Quick StartПовысьте Python базовый пример не работает

#include <boost/python.hpp> 

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

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

Составление проекта на Windows, используя следующий CMake:

cmake_minimum_required(VERSION 3.2) 
project(hello_ext CXX) 
set(TARGET hello_ext) 

set(BOOST_MIN_VERSION "1.61.0") 
set(Boost_ADDITIONAL_VERSIONS "1.61.0" "1.61") 
set(BOOST_ROOT ${MY_BOOST_DIR}) 

set(Boost_USE_STATIC_LIBS OFF) 
set(Boost_USE_STATIC_RUNTIME OFF) 
set(Boost_USE_MULTITHREADED ON) 

find_package(PythonLibs 3.4 REQUIRED) 
find_package(Boost 1.61.0 COMPONENTS python REQUIRED) 

file(GLOB SOURCES *.cpp) 

include_directories(${INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS}) 

python_add_module(${TARGET} ${SOURCES}) 

target_link_libraries(${TARGET} ${Boost_PYTHON_LIBRARY} ${PYTHON_LIBRARIES}) 

Модуль успешно скомпилирован как hello_ext.pyd. Попытка получить доступ к нему из сценария Python, помещенной в том же каталоге:

import hello_ext 
print(hello_ext.greet()) 

Getting следующий результат выполнения:

python3 test_cpp.py

Import Error: DLL load failed: The specified module could not be found

Кроме того, пытались поместить hello_ext.pyd в каталог Python DLL (C :/Python34/DLL) с тем же результатом

для Windows 7 32 бит

C++ компилятор: Visual C++ 2015

Python 3.4.2, Повысьте 1,61

Update: решена, см ниже

ответ

0

Я добавил каталог содержал Boost, Python * .lib и * .dll файлы в PATH. Это делает пример работы

0

Это для пользователей Mac, потому что я пробовал вышеуказанное решение, и это не сработало для меня, используя osx el capitan. У меня есть два CMakeLists.txt, которые работают, однако, я не думаю, что это проблема, основанная на, https://gitlab.kitware.com/cmake/cmake/issues/16335.

PROJECT(example) 
set(CMAKE_CXX_STANDARD 11) 
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) 
cmake_policy(SET CMP0042 NEW) 
set(EIGEN_DIR "/usr/local/include/eigen3/") 
set(PYTHON_INCLUDE_DIRS "//anaconda/include/python2.7") 
set(PYTHON_LIBRARY "//anaconda/lib/libpython2.7.dylib") 
find_package(Boost 1.66.0 COMPONENTS python) 
if(Boost_FOUND) 
    include_directories(${Boost_INCLUDE_DIRS} ${EIGEN_DIR} ${PYTHON_INCLUDE_DIRS} include) 
    set(Boost_USE_STATIC_LIBS OFF) 
    set(Boost_USE_MULTITHREADED ON) 
    set(Boost_USE_STATIC_RUNTIME OFF) 
    add_library (yay MODULE src/example_ext.cpp) 
    target_link_libraries(yay ${Boost_LIBRARIES} ${PYTHON_LIBRARY}) 
endif() 

PROJECT(example) 
set(CMAKE_CXX_STANDARD 11) 
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) 
cmake_policy(SET CMP0042 NEW) 
set(EIGEN_DIR "/usr/local/include/eigen3/") 
find_package(Boost 1.66.0 COMPONENTS python3) 
if(Boost_FOUND) 
    set(Boost_USE_STATIC_LIBS OFF) 
    set(Boost_USE_MULTITHREADED ON) 
    set(Boost_USE_STATIC_RUNTIME OFF) 
    find_package(PythonLibs REQUIRED) 
    include_directories(${Boost_INCLUDE_DIRS} ${EIGEN_DIR} ${PYTHON_INCLUDE_DIRS} include) 
    add_library (yay SHARED src/example_ext.cpp) 
    target_link_libraries(yay ${Boost_LIBRARIES} ${PYTHON_LIBRARY}) 
endif() 
Смежные вопросы