使用pybind11可以将C++代码封装成Python模块,使得Python代码可以直接调用C++函数。下面是使用pybind11封装C++实现函数库的方法示例。
1. 准备工作
首先需要安装pybind11库,可以通过pip进行安装。
pip install pybind11
2. 写C++代码
假设我们要封装的C++函数是一个简单的加法函数,代码如下:
int add(int a, int b) {
return a + b;
}
3. 写Python绑定代码
在Python中,可以使用pybind11库将上面的C++函数封装成一个Python模块。
#include <pybind11/pybind11.h>
int add(int a, int b);
PYBIND11_MODULE(add_module, m) {
m.doc() = "pybind11 example plugin"; // optional module docstring
m.def("add", &add, "A function which adds two numbers");
}
上面的代码将add
函数封装成一个Python模块,并使用了def
函数将其绑定到Python中。
4. 编译生成动态链接库
最后,需要将C++代码编译成动态链接库(.dll、.so等),并将其命名为add_module
。
示例1: 使用CMake生成动态链接库
首先,创建一个CMakeLists.txt文件,内容如下:
cmake_minimum_required(VERSION 3.0)
project(add_module)
add_subdirectory(pybind11)
pybind11_add_module(add_module add.cpp)
在终端中执行以下命令:
mkdir build
cd build
cmake ..
make
执行完上述命令后,会在build文件夹中生成一个名为add_module.so
(Linux或MacOS)或add_module.dll
(Windows)的动态链接库文件。
示例2: 使用g++生成动态链接库
在终端中执行以下命令:
g++ -O3 -Wall -shared -std=c++11 -fPIC `python3 -m pybind11 --includes` add.cpp -o add_module`python3-config --extension-suffix`
执行完上述命令后,会在当前目录下生成一个名为add_module
的动态链接库文件。
5. Python中调用C++函数
通过以下Python代码可以调用C++函数:
import add_module
print(add_module.add(1, 2)) # Output: 3
可以看到,上述Python代码直接调用了C++中的add
函数,并返回了结果。
总结
上述过程是使用pybind11将C++函数封装成Python模块的示例。将C++代码封装成Python模块,可以使得Python和C++之间互相调用变得非常方便。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用pybind11封装C++实现的函数库的方法示例 - Python技术站