python 调用c++代码 示例
时间: 2023-07-30 21:06:15 浏览: 163
可以使用Python的ctypes模块来调用C++代码。以下是一个简单的示例:
假设我们有一个C++的文件 `example.cpp`:
```cpp
#include <iostream>
using namespace std;
extern "C" {
int add(int a, int b) {
return a + b;
}
}
```
编译这个文件生成一个动态链接库:
```
g++ -shared -o example.so example.cpp
```
然后,在Python中使用ctypes模块调用这个动态链接库:
```python
import ctypes
# 加载动态链接库
example = ctypes.cdll.LoadLibrary("./example.so")
# 调用函数
result = example.add(1, 2)
print(result) # 输出 3
```
需要注意的是,C++代码中的函数需要使用 `extern "C"` 来防止函数名被C++编译器改变。在Python中调用函数时需要与C++代码中的函数名相同。
相关问题
ubuntu python调用c++函数示例
在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`来重新加载共享库,以便使用新的修改。
python windows下 调用c++代码 示例
在Windows下,可以使用Python的ctypes模块来调用C++代码。以下是一个简单的示例:
假设我们有一个C++的文件 `example.cpp`:
```cpp
#include <iostream>
using namespace std;
extern "C" {
__declspec(dllexport) int add(int a, int b) {
return a + b;
}
}
```
编译这个文件生成一个动态链接库,在Windows下需要使用Visual Studio的命令行工具,例如:
```
cl.exe /LD example.cpp
```
然后,在Python中使用ctypes模块调用这个动态链接库:
```python
import ctypes
# 加载动态链接库
example = ctypes.cdll.LoadLibrary("./example.dll")
# 调用函数
result = example.add(1, 2)
print(result) # 输出 3
```
需要注意的是,在Windows下,需要使用 `__declspec(dllexport)` 来导出函数。在Python中调用函数时需要与C++代码中的函数名相同。另外,编译生成的动态链接库文件是 `.dll` 格式。
阅读全文