5人参与 • 2026-03-18 • Python
在 python 中调用 c++ 库,通常有以下几种方式:
适用于 c 风格的函数接口。可以用于调用编译为 `.so`(linux)或 `.dll`(windows)的库。
步骤:
1. 将 c++ 编译为动态链接库,并使用 `extern "c"` 导出函数。
2. 在 python 中使用 `ctypes` 加载并调用这些函数。
示例:c++ 文件 (add.cpp)
// add.cpp
#include <iostream>
extern "c" {
int add(int a, int b) {
return a + b;
}
}编译成共享库
g++ -shared -fpic -o libadd.so add.cpp
python 调用代码
import ctypes
# 加载 dll/so
lib = ctypes.cdll('./libadd.so')
# 设置参数类型和返回值类型(可选但推荐)
lib.add.argtypes = [ctypes.c_int, cypes.c_int]
lib.add.restype = ctypes.c_int
result = lib.add(3, 4)
print("result from c++:", result) # 输出: result from c++ :7不如 pybind11 简洁,这里略过。
最推荐的方式,专为 python 和 c++ 混合编程设计,功能强大且简洁。
步骤:
1. 安装 pybind11:
pip install pybind11
2. 写一个封装了 c++ 的绑定文件。
3. 编译生成 `.pyd` 或 `.so` 文件供 python import。
示例:c++ 文件 (example.cpp)
#include <pybind11/pybind11.h>
int add(int i, int j) {
return i + j;
}
pybind11_module(example, m) {
m.def("add", &add, "a function that adds two numbers");
}编译方法 1:使用命令行
c++ -o3 -wall -shared -std=c++11 -fpic `python3 -m pybind11 --includes` example.cpp -o example$(python3-config --extension-suffix)
python 调用
import example print(example.add(3, 4)) # 输出: 7
适合大型项目,但学习成本稍高。
小结

使用 pybind11 封装 c++ 类是一个相对直接的过程,它允许你将 c++ 类暴露给 python 代码。下面我将展示如何使用 pybind11 来封装一个简单的 c++ 类。
假设我们有一个简单的 c++ 类 rectangle,它有两个方法:计算矩形的面积和周长。
c++ 文件 (rectangle.cpp)```cpp
#include <pybind11/pybind11.h>
namespace py = pybind11;
class rectangle {
public:
rectangle(double width, double height) : width_(width), height_(height) {}
double area() const {
return width_ * height_;
}
double perimeter() const {
return 2 * (width_ + height_);
}
private:
double width_, height_;
};
pybind11_module(rectangle_module, m) {
py::class_<rectangle>(m, "rectangle") // 绑定类
.def(py::init<double, double>()) // 绑定构造函数
.def("area", &rectangle::area) // 绑定成员函数
.def("perimeter", &rectangle::perimeter); // 绑定成员函数
}在这个例子中:
一旦编译完成,你就可以像导入任何其他 python 模块一样导入并使用这个新模块:
import rectangle_module
rect = rectangle_module.rectangle(5, 4)
print(f"area: {rect.area()}") # 输出: area: 20
print(f"perimeter: {rect.perimeter()}") # 输出: perimeter: 181. 安装 visual studio:确保你已经安装了 visual studio,并且包含“使用 c++ 的桌面开发”工作负载。
2. 安装 python:下载并安装适合你项目的 python 版本。
3.下载pybind11库,这是一个仅包含头文件的轻量级库,使用起来非常方便。可以在github下载其release版本 pybind11 可以参考:官方文档
1. 创建一个新的空项目。
2. 添加源文件:将上述 c++ 代码保存为 `example.cpp` 并添加到你的 visual studio 项目中。
3. 配置项目属性:
4. 设置输出类型:右键点击项目 -> 属性 -> 配置属性 -> 常规 -> 配置类型,选择“动态库(.dll)”。
5. 编译项目:选择合适的配置(debug 或 release),然后编译项目。确保在项目属性中将目标扩展名设置为 .pyd(这是 python 在 windows 上使用的扩展名),或者生成的 .dll 文件需要重命名为 .pyd ,其才能被 python 正确识别。
这样,你就成功地在 windows 上使用 python 调用了 c++ 库。通过这种方式,你可以将复杂的 c++ 功能集成到 python 应用程序中。对于更复杂的项目或类的封装,逻辑大致相同,但可能需要更多的细节配置。
到此这篇关于python如何实现简单调用c++库的文章就介绍到这了,更多相关python调用c++库内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论