python调用动态链接库的基本过程详解调用动态链接库的基本过程详解
主要介绍了python调用动态链接库的基本过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工
作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
动态链接库在Windows中为.dll文件,在linux中为.so文件。以linux平台为例说明python调用.so文件的使用方法。
本例中默认读者已经掌握动态链接库的生成方法,如果不太清楚的可以参考动态链接库的使用
调用上例动态链接库的使用中的sum.so
import ctypes
so = ctypes.CDLL('./sum.so')
print "so.sum(50) = %d" % so.sum(50)
so.display("hello world!")
print "so.add() = %d" % so.add(ctypes.c_float(2), ctypes.c_float(2010))
output
so.sum(50) = 1275
hello world!
so.add() = 2012
注意:
如果python在调用C函数内部出现了问题,系统不会提示具体出现什么问题,只会提示"segmentation fault"。所以最好
是先用C语言调用该动态库验证没有问题了再提供给python调用。
python传参给C函数时,可能会因为python传入实参与C函数形参类型不一致会出现问题( 一般int, string不会有问
题,float要注意 )。这时需要在python调用时传入的实参做一个类型转换(见so.add(float, float)函数的调用)。转换方式见
下表:
数组的传入传出数组的传入传出
如果将python中list传入C函数数组,则需要提前转换。
import ctypes
pyarray = [1, 2, 3, 4, 5]
carrary = (ctypes.c_int * len(pyarray))(*pyarray) //有点类似malloc的方式生成carray
print so.sum_array(carray, len(pyarray))
评论5
最新资源