Код: Выделить всё
#include
char const* greet()
{
return "hello, world";
}
BOOST_PYTHON_MODULE(benchmark)
{
using namespace boost::python;
def("greet", greet);
}
Код: Выделить всё
cmake_minimum_required(VERSION 3.21)
find_package (Python3 COMPONENTS Interpreter Development REQUIRED)
find_package(Boost COMPONENTS python REQUIRED)
set(BENCHMARK_MODULE benchmark)
add_library(${BENCHMARK_MODULE} MODULE benchmark.cpp)
set_target_properties(${BENCHMARK_MODULE} PROPERTIES PREFIX "" SUFFIX ".pyd")
target_include_directories(${BENCHMARK_MODULE} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_include_directories(${BENCHMARK_MODULE} PUBLIC ${Boost_INCLUDE_DIR})
target_include_directories(${BENCHMARK_MODULE} SYSTEM PUBLIC ${Python3_INCLUDE_DIRS})
target_link_libraries(${BENCHMARK_MODULE} PUBLIC ${Python3_LIBRARIES})
target_link_libraries(${BENCHMARK_MODULE} PUBLIC ${Boost_LIBRARIES})
Зависимости. Современный Dependency Walker с открытым исходным кодом предоставил мне следующие зависимости для benchmark.pyd:
< ul>
[*]C:\WINDOWS\system32\kernel32.dll
[*]C:\msys64\mingw64\bin\libgcc_s_seh-1.dll
[*]C:\WINDOWS\system32\MSVCRT.dll
[*]C:\msys64\mingw64\bin\libstdc++-6.dll
[*]C:\msys64\mingw64\bin\libboost_python311-mt.dll
[*]C:\Program Files\Python312\python312.dll
поэтому в коде Python я попытался импортировать этот модуль следующим образом:
Код: Выделить всё
import os
import sys
sys.path.append('C:\\msys64\\mingw64\\bin')
[os.add_dll_directory(path) for path in sys.path if os.path.isdir(path)]
import benchmark
В чем причина такого поведения? Как это исправить?
Подробнее здесь: https://stackoverflow.com/questions/790 ... oostpython