python调用C函数库

python调用C函数库

(2012-10-31 13:47:50)

背景:工作中,有很多公共类库是使用C语言实现的。虽然可以将之编译成可执行的二进制文件,使用已熟知的commands模块获取shell命令行返回的结果;但是有些时候,所传的参数中含有shell命令中需要转义的字符(如,“$”),因此想到使用python直接调用C语言的函数库,省去了对字符串中特殊字符进行转义的麻烦。

.so文件的生成与使用

想要使用python调用C语言的函数,必须先将C程序编译生成.so文件。生成.so文件需要使用“gcc -shared”命令。

为了检测生成的.so文件的可用性,可以编写简单的C语言测试代码,常用的函数有:

void* handle = dlopen("xxx.so", RTLD_LAZY);   //打开动态链接库,并赋值给handle句柄,供后续使用

myfunc = dlsym(handle, "func_name");            //获取动态链接库中的函数指针

dlclose(handle); //通过句柄关闭动态链接库

ctypes模块简介

python中,ctypes模块可以加载动态链接库,使用时,需要首先“from ctypes import *”。

常用的函数有:

libc = cdll.LoadLibrary("xxx.so")  #加载.so动态链接库

libc.myfunc(...)                        #调用动态链接库中的函数

另,因python与C语言中的数据类型不同,对于string类型,在调用C链接库中的函数时,需要使用“c_char_p”对将字符串转换为标准C中的char*类型。

注:ctypes不支持C++的数据类型(如,C++中的string等)。

附,python和C数据类型对照表:

python调用C函数库

实例

1、首先创建一个具有标准C数据类型的参数和返回值的函数(函数体中可以包含C++数据类型的元素)。

     为了避免C编译器修改函数的名字,使用extern "C" 来声明函数,如,

python调用C函数库

      使用“nmxxx.so”命令可以查看xxx.so中的函数列表。

2、因python调用so动态链接库出core时不便于调试,在生成so文件后,首先编写一个简单的test.c来检测生成的.so文件的可用性:

python调用C函数库

3、编写python脚本调用动态链接库:

python调用C函数库

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值