利用pybind生成python的C++扩展模块

pybind用起来比较方便,代码量也比较少。首先用pip 安装pybind。

然后编写c++代码,以c++的加法拓展为例:

#include <pybind11/pybind11.h>
namespace py = pybind11;
 
int add(int i, int j)
{
    return i + j;
}
 
PYBIND11_PLUGIN(example)
{
    py::module m("example", "pybind11 example plugin");
    m.def("add", &add, "A function which adds two numbers");
    return m.ptr();
}

需要在开头include <pybind11/pybind11.h>,在路径D:\ProgramFiles\python36\include\pybind11下,可以找到相应的头文件。

接着进行以下步骤进行编译,需要安装vs。

以下命令在VS 2017 X86 本机命令提示工具中输入

cl example.cpp /I "D:\learningPython\3_C++PythonModel\pybind11-master\include" /I "D:\ProgramFiles\python36\include" /LD /Fe:example.pyd /link/LIBPATH:"D:\ProgramFiles\python36\libs\"

命令参数解释: 
/I 添加cpp文件中头文件的搜索路径
/LD 生成动态库文件
/Fe 输出文件的路径及名称
/link/LIBPATH 附加的库文件

完成后相应的文件夹里会生成example.pyd这个文件,就是最终的库了。直接在当前文件夹启动cmd,输入python,import example 就可以用了。

D:\learningPython\3_C++PythonModel>python
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 16:07:46) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import example
>>> example.add(2,3)
5
>>>

到这里基本就打通了用c++给python写扩展模块的流程了,更复杂的函数功能在c++里写好就行了。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页