作者:丙尔金开发_448 | 来源:互联网 | 2024-11-20 16:35
本文介绍了一种方法,通过使用Python的ctypes库来调用C++代码。具体实例为实现一个简单的加法器,并详细说明了从编写C++代码到编译及最终在Python中调用的全过程。
1. 编写C++代码
本示例中的C++代码实现了一个简单的加法功能。使用extern "C"
是为了防止C++的名称修饰问题,确保Python的ctypes库能够正确调用。以下是具体的C++代码:
#include
// 加法函数
extern "C"
int add_func(int a, int b)
{
return a + b;
}
// 调用接口
extern "C"
static PyObject *_add_func(PyObject *self, PyObject *args)
{
int _a, _b;
if (!PyArg_ParseTuple(args, "ii", &_a, &_b))
return NULL;
int res = add_func(_a, _b);
return PyLong_FromLong(res);
}
extern "C"
static PyMethodDef CppModuleMethods[] =
{
{"add_func", _add_func, METH_VARARGS, "Add two integers."},
{NULL, NULL, 0, NULL}
};
extern "C"
PyMODINIT_FUNC initcpp_module(void)
{
(void) Py_InitModule("cpp_module", CppModuleMethods);
}
2. 编译C++代码
根据操作系统不同,编译方式也有所不同。在Linux系统中,可以使用以下命令将C++代码编译为动态链接库(.so文件);而在Windows系统中,则需要编译为动态链接库(.dll文件)。
# Linux系统
gcc -o add_demo.so -shared -fPIC add_demo.cpp
# Windows系统
cl /LD add_demo.cpp /link /out:add_demo.dll
3. 在Python中调用C++函数
接下来,我们将在Python脚本中调用之前编译好的C++函数。这里使用Python的ctypes库来加载并调用C++动态链接库中的函数。
import ctypes
# 加载动态链接库
lib = ctypes.CDLL('./add_demo.so')
# 调用C++函数
result = lib.add_func(2, 3)
print(f'Python calling C++ function: Result is {result}')
以上步骤展示了如何从编写C++代码到在Python环境中成功调用的过程。这种方法不仅适用于简单的数学运算,还可以扩展到更复杂的算法和数据处理任务。