PyBind11 使用指南
PyBind11 是一个轻量级的头文件库,能够将 C++ 代码无缝暴露给 Python,实现高性能的跨语言调用。它利用现代 C++(C++11 及以上)特性,在编译期生成高效的绑定代码,相比传统的 SWIG 或 Boost.Python 更加简洁易用。
核心优势与基本结构
- 仅需包含头文件,无需额外链接库
- 支持 STL 容器、智能指针、类继承等复杂类型自动转换
- 编译后模块可直接通过 import 在 Python 中调用
快速入门示例
创建一个简单的 C++ 函数并绑定至 Python:
#include <pybind11/pybind11.h>
int add(int a, int b) {
return a + b;
}
// 绑定模块入口,模块名为 "example"
PYBIND11_MODULE(example, m) {
m.doc() = "auto-generated module"; // 模块文档
m.def("add", &add, "A function that adds two numbers");
}
上述代码定义了一个名为 add 的函数,并通过 PYBIND11_MODULE 宏将其注册到 Python 模块 example 中。在 Python 环境中可通过以下方式调用:
import example
print(example.add(3, 4)) # 输出 7
构建方式说明
通常使用 CMake 或直接通过 g++ 编译生成共享库。以下是使用 g++ 的基本命令(需安装 Python 开发头文件):
- 安装 pybind11:
pip install pybind11 - 编译命令示例:
g++ -O3 -Wall -shared -std=c++11 -fPIC \
`python3 -m pybind11 --includes` \
example.cpp -o example.so
| 编译选项 | 作用说明 |
|---|---|
-shared | 生成共享库以便 Python 导入 |
-fPIC | 生成位置无关代码,适用于共享库 |
--includes |

