如何在python中引用c/c++函数

Feronia ·
更新时间:2024-11-13
· 522 次阅读

如何在python中引用c/c++函数Python调用c/c++python调用c Python调用c/c++

由于python性能问题的原因,在实际项目中往往会在python中去调用c的一些方法,本文将介绍在centos8下面python去调用c的方法。

python调用c

c的示例代码如下:

#include #include #include #include typedef struct { int a,b; }Node; int add(Node node) { return node.a+node.b; } void display() { puts("Welcome xiaojia blog"); return ; }

然后将这个c文件编译成动态链接库

gcc -o libpycall.so -shared -fPIC python_call_c.c # 动态链接库名称需要以lib开头,在这里libpycall.so就是我们编译成的so库

目录结构
接下来我们就可以在python中去引用c中的这两个方法了
python提供的ctypes库来引用这些方法。
我们可以先看下简单的调用,先只调用display方法,python代码如下:

import ctypes load = ctypes.cdll.LoadLibrary obj = load("./libpycall.so") obj.display();

display
那么如果我们想传一个结构体参数该怎么办呢?ctypes库也为我们提供了数据类型映射表https://docs.python.org/3/library/ctypes.html#type-conversions

类必须继承自 ctypes.Structure,每个子类必须定义一个_fields_属性,示例代码如下:

import ctypes from ctypes import * load = ctypes.cdll.LoadLibrary obj = load("./libpycall.so") obj.display(); class Add(Structure): _fields_ = [ ('a', c_int), ('b', c_int) ] _add = Add(1, 10) res = obj.add(_add) print(res)

结果如下图所示:
在这里插入图片描述

xiao~jia 原创文章 1获赞 0访问量 88 关注 私信 展开阅读全文
作者:xiao~jia



在python中 c+ 函数 C++ Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号