python调用c语言函数 | 酷壳
";document.body.appendchild(e);e.play()}function x(e){e.classname+=" "+s+" "+o}function t(e){e.classname+=" "+s+" "+u[math.floor(math.random()*u.length)]}function n(){var e=document.getelementsbyclassname(s);var t=new regexp("\\b"+s+"\\b");for(var n=0;n
酷壳 – coolshell.cn
- 首页
- 推荐文章
- 本站插件
- 留言小本
- 关于酷壳
- 关于陈皓
python调用c语言函数
使用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脚本中需要把动态链接库放到当前目录中。
(转载本站文章请注明作者和出处 酷壳 – coolshell.cn ,请勿用于任何商业用途)
相关文章
- 2012年07月13日 -- 代码执行的效率
- 2009年09月27日 -- 非常简单的python http服务
- 2009年12月11日 -- 如何使用python操作摄像头
- 2009年04月26日 -- 用python写ncurses ui
- 2009年04月12日 -- python处理中文的时候的一些小技巧
- 2009年05月10日 -- 用tcc可以干些什么?
- 2009年04月30日 -- 某python实现的尾部递归
- 2010年02月01日 -- python程序员的进化
-
xavier2010年1月30日11:07 | #1回复 | 引用
总结地不错,学习了。
我手上有个小项目(开源那种),需要帮助,能与我联系否? -
lalala2010年8月11日09:15 | #2回复 | 引用
试了一下,这的可以,呵呵
-
技术的吸收者2010年11月16日14:47 | #3回复 | 引用
一个python 初学者。 谢谢,很喜欢你的翻译!
-
zhangroc2010年12月16日00:32 | #4回复 | 引用
python 调用c语言库: 其实就是要定义号数据交换的接口,和动态链接库的加载和函数名符号解析
-
superiori462011年11月3日13:57 | #5回复 | 引用
不过对于c函数中的传入参数的结构体的问题是怎么解决的?在python中是如何和c函数中的传入参数对应上的?
-
楚公子2011年12月19日22:20 | #6回复 | 引用
@xavier
嗯嗯,好呀。。里留下你的联系方式吧。。我对你的项目很感兴趣 -
匿名的网友2012年8月21日16:14 | #7回复 | 引用
superiori46 :
不过对于c函数中的传入参数的结构体的问题是怎么解决的?在python中是如何和c函数中的传入参数对应上的?用ctypes可以构建c中的结构,比如struct用ctypes可以这样构建:
class mystr(structure):
_fields_ = [
("amt_barley", c_int),
("amt_water", c_int),
] -
styshoo2012年9月17日10:34 | #8回复 | 引用
简介,清晰,很好。
-
rex2013年5月28日08:59 | #9回复 | 引用
请问如果我的共享库依赖于一个其他第三方共享库,在用ctypes的时候仅加载前者会导致符号未解析,这时候应该怎么办呢?ctypes能搞定吗?
-
2011年8月5日20:46 | #1runaway robot (3) – python – web – 思路片段 – 计算机 – c – computer – hack – programming – python – 妖精的尾巴
本站公告
访问 酷壳404页面 支持公益!
酷壳建议大家多使用rss访问阅读(本站已经是全文输出,推荐使用google reader)。有相关事宜欢迎电邮:haoel(at)hotmail.com。最后,感谢大家对酷壳的支持和体谅!
感谢 42qu.com 为本站提供 vps
最新文章
- 浏览器的渲染原理简介
- 疫苗:java hashmap的死循环
- “c++的数组不支持多态”?
- unix考古记:一个“遗失”的shell
- pfif网上寻人协议
- “作环保的程序员,从不用百度开始”
- 《rework》摘录及感想
- 实例分析java class的文件结构
- 并发框架disruptor译文
- sed 简明教程
- awk 简明教程
- linus:利用二级指针删除单向链表
- 从面向对象的设计模式看软件设计
- 应该知道的linux技巧
- 程序算法与人生选择
- web工程师的工具箱
- 如此理解面向对象编程
- 程序员疫苗:代码注入
- 你可能不知道的shell
- 为什么不能用微信或米聊这类的软件
- 如何测试洗牌程序
- go 语言简介(下)— 特性
- go 语言简介(上)— 语法
- tf-idf模型的概率解释
- xkcd 神图“click and drag”
- bret victor – learnable programming
- c/c++语言中闭包的探究及比较
- 对九个超级程序员的采访
- 无锁队列的实现
- “单元测试要做多细?”
全站热门
- 程序员技术练级攻略
- 简明 vim 练级攻略
- 如何学好c语言
- 6个变态的c语言hello world程序
- 由12306.cn谈谈网站性能技术
- android将允许纯c/c++开发应用
- 我是怎么招聘程序员的
- “21天教你学会c++”
- 应该知道的linux技巧
- 做个环保主义的程序员
- 28个unix/linux的命令行神器
- 编程真难啊
- “作环保的程序员,从不用百度开始”
- web开发中需要了解的东西
- stevey对amazon和google平台的吐槽
- c++ 程序员自信心曲线图
- 20本最好的linux免费书籍
- 如何写出无法维护的代码
- 各种流行的编程风格
- 深入理解c语言
- 程序算法与人生选择
- windows编程革命简史
- 面试题:火车运煤问题
- 如何学好c++语言
- 三个事和三个问题
- 别的程序员是怎么读你的简历的
- 老手是这样教新手编程的
- 偷了世界的程序员
- c语言的谜题
- 再谈“我是怎么招聘程序员的”(上)
新浪微博
标签
分类目录
- .net编程 (2)
- ajax开发 (9)
- c/c++语言 (50)
- erlang (1)
- java语言 (28)
- php脚本 (11)
- python (20)
- ruby (4)
- unix/linux (63)
- web开发 (98)
- windows (12)
- 业界新闻 (25)
- 企业应用 (2)
- 技术新闻 (32)
- 技术管理 (7)
- 技术读物 (115)
- 操作系统 (43)
- 数据库 (10)
- 杂项资源 (246)
- 流程方法 (43)
- 程序设计 (65)
- 系统架构 (5)
- 编程工具 (61)
- 编程语言 (157)
- 网络安全 (21)
- 职场生涯 (32)
- 趣味问题 (13)
- 轶事趣闻 (145)
归档
- 2013 年五月&(2)
- 2013 年四月&(3)
- 2013 年三月&(3)
- 2013 年二月&(5)
- 2013 年一月&(1)
- 2012 年十二月&(4)
- 2012 年十一月&(5)
- 2012 年十月&(3)
- 2012 年九月&(4)
- 2012 年八月&(8)
- 2012 年七月&(4)
- 2012 年六月&(7)
- 2012 年五月&(6)
- 2012 年四月&(6)
- 2012 年三月&(6)
- 2012 年二月&(3)
- 2012 年一月&(6)
- 2011 年十二月&(5)
- 2011 年十一月&(9)
- 2011 年十月&(6)
- 2011 年九月&(5)
- 2011 年八月&(14)
- 2011 年七月&(6)
- 2011 年六月&(12)
- 2011 年五月&(5)
- 2011 年四月&(18)
- 2011 年三月&(16)
- 2011 年二月&(16)
- 2011 年一月&(18)
- 2010 年十二月&(11)
- 2010 年十一月&(11)
- 2010 年十月&(19)
- 2010 年九月&(15)
- 2010 年八月&(10)
- 2010 年七月&(20)
- 2010 年六月&(9)
- 2010 年五月&(13)
- 2010 年四月&(12)
- 2010 年三月&(11)
- 2010 年二月&(7)
- 2010 年一月&(9)
- 2009 年十二月&(22)
- 2009 年十一月&(27)
- 2009 年十月&(17)
- 2009 年九月&(15)
- 2009 年八月&(21)
- 2009 年七月&(18)
- 2009 年六月&(19)
- 2009 年五月&(27)
- 2009 年四月&(53)
- 2009 年三月&(43)
最新评论
- rex: 请问如果我的共享库依赖于一个其他第三方共享库,在用ctype s的时候仅加载前者会导致符号未解析,这时候应该怎么办呢?ct ypes能搞定吗?
- wente: 好吧,我有强迫症,那个是开窍吧。。
- hellokitty: @supersonic yes, 需要一个 secrit 字段来共同进行 md5 加密就ok了, 如果secrit 字段足够长,并且足够复杂,而且对同一个用户有访问次数限制的话 ,理论上来说是不能被破解的
- 呵呵: 试下头像
- 呵呵: 爱国者 : 当调用hashmap.put时,如果没有用synchroni zed关键字将它包起来,那么在高并发下才会出现这个问题,如果 用synchronized包起来是不会有这个问题的...
- 六道: skills 休养,程序员的休养
- 小白: 学习了, 不过我觉得这里的重点不是怎么用指针, 而是发现head和next在逻辑上的一致性。
- 风中浮云: 学习了,感谢leo.
- xylon: 刚看完的时候觉得有点不以为然,但仔细想想很有道理,信息安全的 问题的确有好大的隐患!这其实和我不去用360安全卫士的道理差 不多!的赶紧处理一下,因为用的qq通讯录,一样的同步了信息!
- hellocoolshell: 好像彻底摆脱百度,比较困难,呜呜!
- wj: 记得以前看过gosling发明java的轶事,说是因为他觉得 c++太难了。可见对一种语言表达不满最好的方法就是开发一种更 好的。
- d瓜哥: 不错,非常漂亮!一直在用,突然不用还有点不习惯。哈哈
- youcou12: nick : 由于平时经常要搜英语的资源基本都用google 对楼主的观点略不赞同 如文中所述 百度虽然存在缺陷 但理由不足以让人彻底放弃 我也觉得很对,对baidu的打击面太广了.如果都用go...
- youcou12: google有什么好的,人家想分裂中国,看不起中国,还这么依 赖google,所谓的精英就是这样的.没有国还玩个屁啊
- youcou12: 我觉得百度对中文搜索还是可以的啊, 一个工具而已啊,搞不懂
友情链接
- 陈皓的博客
- 并发编程
- 四火的唠叨
- devtext 开发者社区
- claymore's blog
- dutor.net
- bones7456
- keengle's blog
- 简明现代魔法
- 罗素工作室
- 代码回音
- hellogcc working group
- 吕毅的blog
- todd wei的blog
- c++爱好者博客
- html5研究小组
- 12free
- 朱文昊albert zhu
- c瓜哥的博客
- 开源吧
- 靖难|魔都小码农
- acmer
- 陈鹏个人博客
- onecoder
- 狂shell – happy hacking
- tektea's blog
- 夕水溪下
功能
- 注册
- 登录
- 文章 rss
- 评论 rss
- wordpress.org