ubuntu python调用c++函数示例
时间: 2024-09-12 14:12:05 浏览: 46
在Ubuntu系统中,如果你想用Python调用C++编写的函数,你需要创建一个C++的共享库(动态链接库),然后通过Python的`ctypes`库或者`cffi`库来调用这个库中的函数。下面是一个简单的示例来说明这个过程:
**步骤 1: 编写C++函数**
首先,你需要有一个C++源文件,比如`add.cpp`,它包含你想要在Python中调用的函数:
```cpp
// add.cpp
extern "C" {
#include <Python.h>
}
extern "C" {
PyObject* add(PyObject* /*self*/, PyObject* args) {
int a, b, result;
if (!PyArg_ParseTuple(args, "ii", &a, &b))
return NULL;
result = a + b;
return PyLong_FromLong(result);
}
static PyMethodDef AddMethods[] = {
{"add", add, METH_VARARGS, "Add two integers"},
{NULL, NULL, 0, NULL} // Sentinel
};
static struct PyModuleDef addmodule = {
PyModuleDef_HEAD_INIT,
"addmodule",
NULL,
-1,
AddMethods
};
PyMODINIT_FUNC PyInit_addmodule() {
return PyModule_Create(&addmodule);
}
}
```
**步骤 2: 编译C++代码为共享库**
接下来,使用g++编译器编译这个C++文件为共享库:
```sh
g++ -shared -fPIC -o libadd.so -I/usr/include/python3.x add.cpp
```
这里的`-I/usr/include/python3.x`是指定Python头文件的路径,`x`是你当前Python版本的主版本号(例如,对于Python 3.8,使用`3.8`)。
**步骤 3: 在Python中使用ctypes调用C++函数**
现在,你可以在Python脚本中导入并使用这个共享库了:
```python
import ctypes
# 加载共享库
lib = ctypes.CDLL('./libadd.so')
# 调用函数
result = lib.add(4, 5)
print(result) # 输出: 9
```
确保将`./libadd.so`替换为你的共享库文件的正确路径。
**步骤 4: 清理工作**
在每次修改C++代码并重新编译后,需要重启Python进程,或者在Python中使用`ctypes.cdll.Reload`来重新加载共享库,以便使用新的修改。
阅读全文