Python使用ctypes调用C/C++的方法
python使用ctypes调用C/C++
1.ctpes介绍
ctypesisaforeignfunctionlibraryforPython.ItprovidesCcompatibledatatypes,andallowscallingfunctionsinDLLsorsharedlibraries.ItcanbeusedtowraptheselibrariesinpurePython.
官方文档地址:https://docs.python.org/3/library/ctypes.html
2.使用ctypes调用C语言
python对于标准C的兼容做的相当不错,调用起来相对比较简单,下面给大家上案例
1.创建一个adder.c文件,代码如下:
#includeintadd_int(int,int); floatadd_float(float,float); intadd_int(intnum1,intnum2) { returnnum1+num2; } floatadd_float(floatnum1,floatnum2) { returnnum1+num2; }
这是一个标准C编写的连个函数,用来计算两个整数相加和两个单精度浮点数相加
2.编译生成.so文件供python程序调用
在linux环境下使用gcc对adder.c进行编译
命令:gccadder.c-fPIC-shared-oadder.so
3.在python程序中调用.so
创建一个python文件,命令为adder.py,代码如下:
fromctypesimport* adder=CDLL("./adder.so") res_int=adder.add_int(4,5) print("result:"+str(res_int))
然后在终端里执行命令:pythonadder.py
执行命令之后就能获得到输出了。
3.使用ctypes调用C++
与调用C语言不通,在调用C++代码时,需要在源文件中增加一个extern"C"的代码块
1.创建一个adder_plus.cpp文件,代码如下:
#include#include usingnamespacestd; intadd_integer(inta,intb); floatadd_float(floata,floatb); intadd_integer(inta,intb){ returna+b; } floatadd_float(floata,floatb){ returna+b; } extern"C"{ intadd_integer_plus(inta,intb){ returnadd_integer(a,b); } floatadd_float_plus(floata,floatb){ returnadd_float(a,b); } }
在extern"C"里的代码是暴露给的python的接口,可以使用CDLL进行调用
2.编译生成.so文件供python程序调用
在linux环境下使用gcc对adder.c进行编译
命令:gccadder_plus.cpp-fPIC-shared-oadder_plus.so
3.在python文件中调用.so
创建一个python文件,命名为adder_plus.py,代码如下:
fromctypesimport* add_plus=CDLL('./add_pluse.so') sum=add_plus.add_integer_plus(4,5) print("sum:"+str(sum)) #使用float类型变量作为函数参数 a=c_float(5.5) b=c_float(4.1) add_float=add_plus.add_float_plus add_float.restype=c_float sum_float=add_plus.add_float_plus(a,b) print(sum_float)
然后在终端里执行命令:pythonadder_plus.py
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接