cmake 为CPP代码创建Python绑定,然后将其导入Python脚本

您所在的位置:网站首页 代码导入 cmake 为CPP代码创建Python绑定,然后将其导入Python脚本

cmake 为CPP代码创建Python绑定,然后将其导入Python脚本

2023-03-15 04:29| 来源: 网络整理| 查看: 265

我尝试为一些使用现有C库创建的C代码创建Python绑定。我使用PyBind 11和CMake构建绑定并将其转换为共享库(.so),以便可以直接导入到Python脚本中。创建绑定并构建库后,导入到脚本中会引发ModuleNotFoundError: No module named 'slangparser'错误。我的工作目录如下所示:

toolsuite --- CMakeLists.txt --- build/debug/build --- deps --- slang --- pybind11 --- src --- pybind_wrapper.cpp --- slangparser.cpp

我已将基目录中的CMakeLists.txt文件配置为如下所示:

cmake_minimum_required(VERSION 3.6) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_PREFIX_PATH "/net/sw/python/3.7.4/bin") set(CMAKE_POSITION_INDEPENDENT_CODE ON) project(slang_toolsuite) find_package (PythonLibs REQUIRED) include_directories (${PYTHON_INCLUDE_DIRS}) add_subdirectory(deps/slang) add_subdirectory(deps/pybind11) pybind11_add_module(slangparser SHARED ${CMAKE_CURRENT_SOURCE_DIR}/src/pybindwrapper.cpp) target_link_libraries(slangarser PUBLIC slang::slang)

我要运行的C++代码包含在slangparser.cpp中,将此代码 Package 到绑定中的粘合代码存在于pybindwrapper.cpp中,如下所示:

#include "pybind11/pybind11.h" #include "slangparser.cpp" namespace py = pybind11; PYBIND11_MODULE(slangparser, m) { m.def("slangParser", &slangParser, "C++ function"); }

我不确定问题出在哪里,这个项目是用VSCode构建的,没有任何问题,可以放到/build/debug/build文件夹中。我只是无法将生成的.so库中的slangparser模块导入到我的Python脚本中。我能得到一些帮助吗?谢谢!另外,生成的.so库的文件名为python3.6m,而不是我使用的python3.7。这可能是问题的线索吗?



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3