python动态调用链接库_用python ctypes调用动态链接库

ctypes is very cool! Great piece of work.

- Just van Rossum

ctypes使得python能够直接调用c语言开发的动态链接库,非常强大。

为了使用CTypes,你必须依次完成以下步骤:

* 编写动态连接库程序

* 载入动态连接库

* 将Python的对象转换为ctypes所能识别的参数

* 使用ctypes的参数调用动态连接库中的函数

来个简单的实例吧:

1. 编写动态链接库

// filename: foo.c

#include

char* myprint(char *str)

{

puts(str);

return str;

}

float add(float a, float b)

{

return a + b;

}

以上foo.c代码,linux下编译为动态链接库文件,命令是:

gcc -fPIC -shared foo.c -o foo.so

2. ctypes调用

#!/usr/bin/env python

# FILENAME: foo.py

from ctypes import *

foo = CDLL('./foo.so')

myprint = foo.myprint

myprint.argtypes = [POINTER(c_char)] # 参数类型,为char指针

myprint.restype = c_char_p # 返回类型,同样为char指针

res = myprint('hello')

print res

add = foo.add

add.argtypes = [c_float, c_float] # 参数类型,两个float(c_float内ctypes类型)

add.restype = c_float

print add(1.3, 4.2)

文档请参考http://docs.python.org/library/ctypes.html

3. 查找链接库

>>> from ctypes.util import find_library

>>> find_library("m")

'libm.so.6'

>>> find_library("c")

'libc.so.6'

>>> find_library("bz2")

'libbz2.so.1.0'

>>>

调用libc里的printf:

#filename: printf_example.py

import ctypes

from ctypes.util import find_library

printf = ctypes.CDLL(find_library("c")).printf

printf("hello, world\n")

1

1

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2009-10-12 15:10

浏览 6666

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值