首页 > Python, 编程语言 > Python调用C语言函数

Python调用C语言函数

2009年4月26日 发表评论 阅读评论 4,570 人阅读    

使用Python的ctypes,我们可以直接调用由C直接编译出来的函数。其实就是调用动态链接库中的函数。为什么我们需要这样做呢,因为有些时候,我们可能需要一个性能上比较讲究的算法,有些时候,我们可以在Python中使用已经有了的现成的被封闭在动态链接库中的函数。下面是如何调用的示例。

首先,我们用一个乘法来表示一个算法功能。下面是C的程序:

int
multiply(int num1, int num2)
{
    return num1 * num2;
}

如果在Windows下,你可能需要写成下面这个样子:

#include <windows.h>

BOOL APIENTRY
DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
    return TRUE;
}

__declspec(dllexport) int
multiply(int num1, int num2)
{
    return num1 * num2;
}

然后,自然是把这个C文件编成动态链接库:

Linux下的编译:

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

Windows下的编译:

cl -LD libtest.c -libtest.dll

于是在我们的Python中可以这样使用:
(其中的libtest.so在Windows下改成libtest.dll即可)

>>> from ctypes import *
>>> import os
>>> libtest = cdll.LoadLibrary(os.getcwd() + '/libtest.so')
>>> print libtest.multiply(2, 2)
4

注意:上面的Python脚本中需要把动态链接库放到当前目录中。





分类: Python, 编程语言 标签: ,
好烂啊有点差凑合看看还不错很精彩 (13 人打了分,平均分: 5.00 )
Loading ... Loading ...
  1. xavier
    2010年1月30日11:07 | #1

    总结地不错,学习了。
    我手上有个小项目(开源那种),需要帮助,能与我联系否?

  2. lalala
    2010年8月11日09:15 | #2

    试了一下,这的可以,呵呵

  3. 技术的吸收者
    2010年11月16日14:47 | #3

    一个Python 初学者。 谢谢,很喜欢你的翻译!

  4. zhangroc
    2010年12月16日00:32 | #4

    python 调用C语言库: 其实就是要定义号数据交换的接口,和动态链接库的加载和函数名符号解析

  5. superiori46
    2011年11月3日13:57 | #5

    不过对于c函数中的传入参数的结构体的问题是怎么解决的?在python中是如何和C函数中的传入参数对应上的?

  6. 2011年12月19日22:20 | #6

    @xavier
    嗯嗯,好呀。。里留下你的联系方式吧。。我对你的项目很感兴趣

  1. 2011年8月5日20:46 | #1

无觅相关文章插件,快速提升流量