ChinaUnix >> 文档中心 >> 操作系统 >> Linux >> 正文 IT新闻与评论交流区
 
Python SIP使用总结
发布者:chinaitlab  日期: 2012-02-07 10:07:33 浏览次数:0 (共有_条评论) 查看评论 | 我要评论
 

  Python中使用C/C++模块有许多工具,大名鼎鼎的有SWIG(英文意思为:豪饮)、SIP(英文意思为:啜饮,小口的喝),还有boost.python等。其中SIP是从SWIG发展而来,专为Python调用C/C++模块使用的(看SIP的命名就能看出来,很有意思的)。

  SIP的使用方法,在官网的SIP Reference Guide中有介绍,不过那是针对至少有点经验的人员,对初学者来说,想十分钟快速上手还是有点难度的。这里就介绍下本人在使用SIP总结的需要注意的地方。(本着方便大家方便自己的原则,欢迎转载,无需征得本人同意,但请注明出处,最好是原文连接,图个人气,谢谢!)

  前提,本机上要装了Python、GCC(Windows下可以用MinGW,在我的Eclipse下配置CDT一文中有关于MinGW的安装介绍)、SIP(SIP的安装不难,可以对着SIP Reference Guide的Installation那一节做,安装SIP时就需要GCC了)。

  1、首先,编写个C文件,功能是将两个数字相加并输出,命名为add.c,这个将成为在Python中的模块名,如下:

  [cpp] view plaincopy /* File : add.c */ int add(int x, int y)

  { int g;g = x + y;return g;} 2、接着,手工编写SIP文件(类似C/C++的头文件,编写规范参考SIP Reference Guide,不难,有C/C++基础的人十几分钟就可以了,当然,你要懂鸟语),命名为add.sip,如下:

  [plain] view plaincopy /* Define the SIP wrapper to the add library. */ %Module(name=add, language="C")

  int add(int x, int y);3、编译C文件。按照官网的说法,是编写configure.py,但别急,先做一些必不可少的工作。在命令行将add.c编译成add.o文件:输入

  [sql] view plaincopy gcc -c add.c接着,将这一步生成的add.o文件生产库文件:

  [plain] view plaincopy ar -r libadd.a add.o将libadd.a文件复制到Python文件夹下的libs文件夹中(这两步在这里是为一个单独的C模块测试的,如果是大量的C模块,可以用一个makefile一并批量完成,这也是初学者容易模糊的地方)。

  4、手工编写configure.py文件,同样,这个configure文件的编写也不难,看下规范就会了(要会鸟语……)。这里,我们模仿官网的模版写一个自己的configure.py.

  [python] view plaincopy import os import sipconfig

  # The name of the SIP build file generated by SIP and used by the build # system. build_file = "add.sbf"

  # Get the SIP configuration information. config = sipconfig.Configuration()

  # Run SIP to generate the code. os.system(" ".join([config.sip_bin, "-c", ".", "-b", build_file, "add.sip"]))

  # Create the Makefile. makefile = sipconfig.SIPModuleMakefile(config, build_file)

  # Add the library we are wrapping.  The name doesn't include any platform # specific prefixes or extensions (e.g. the "lib" prefix on UNIX, or the # ".dll" extension on Windows)。

  makefile.extra_libs = ["add"]

  # Generate the Makefile itself. makefile.generate()

  5、运行configure.py,会生成一个makefile文件(直接用IDLE打开configure.py,按F5运行;或者命令行用python configure.py运行都可以)。

  6、在命令行输入make(这里会生成一个关于函数的警告,不用管它,我们是用来测试的……其他的应该没什么问题,若有问题请检查前面的步骤),生成add.pyd文件。然后再输入make install(将add.pyd文件装入到Python的Lib文件夹下的sit-packages文件夹中)。

  7、打开Python 的命令行,进行测试:

  [python] view plaincopy

>>>import add
>>>add.add(4, 7)

  11

>>>

  (原谅我这么烂的模块名……)

  提示:

  (1)、这些文件可以放到Python的文件夹下新建的文件夹中(所有的操作在这个目录下的命令行窗口中使用)。注意,Python的父文件夹名不能有空格,否则会无法读取库文件。

  (2)、使用MinGW,需要把~\MinGW\bin添加的环境变量中(Linux下则不必),这样才能使用gcc、make和ar等工具。

  若还有什么注意的,我回继续补充。

    >>更多交流,请到 ChinaUnix【Linux系统管理论坛】:http://linux.chinaunix.net/bbs/forum-2-1.html

网友评论 已有0位网友发表了看法

  • 验证码:
    【输入评论后显示验证码,均为大写字母,点击图片更新】
        
 
 论坛最新热点更多>> 
· [求助] LINUX开机自动挂载硬...
· vsftp服务器上传excel文件乱码
· 请问如何将windows里的文件复制...
· export命令在rc.local中不运行
· 关于子进程杀不死的情况
· 为什么这么多的UDP端口?
· 求助····linux高手帮忙解决...
· nagios或cacti可以监控一个单独...
· 用debootstrap创建一个可以启动...
· 如何用xinetd限制某用户对teln...
 论坛热门讨论更多>> 
· 华为 3com 内部培训资料 —— ...
· 選出你心目中最“舒服”的LINUX
· Linux术语大全(Linux Glossary...
· 装完F7后您的感觉?
· Linux一句话精彩问答--2009/04...
· 今天晚上死定了
· 开始学Linux了,我的学习笔记
· 大家都来写一下自己的(计算机)...
· 利用sudo加固Linux系统安全
· 重新提供下载:Red Hat Enterp...
 本周十大热点新闻 
· 详解360系列产品 将重回苹果AP...
· 小伙毕业旅行从澳大利亚骑车回浙江
· 台湾,我来了----台湾八日游第一天
· 明星纷抢红馆开演唱会 谢霆锋年...
· 360深陷下架门:或因隐私问题遭...
· 美10岁女生拼出新分子结构将研...
· 环卫工弄脏挡道轿车遭暴打续:...
· 支付宝一家独大格局开始洗牌:1...
· 永中注册商标价值几何?
· 造型设计已经定型 全新QQ将于明...
 本周十大争议新闻 
· 长安大学两男生为救同学溺水身亡
· 网帖曝光现役军人回家探亲时拍...
· 58同城回应虚假信息问题:建立...
· 资料:话剧《笑面人》演员-刘端端
· 青岛建设银行员工晒工资和支出...
· 《加勒比海盗4》杰克船长是镇台...
· 《甄嬛传》演员阵容强大 孙茜演...
· 资料图片:《我爱记歌词》领唱...
· 资料图片:《麻辣女兵》主要演...
· 新版《西游记》坎坷上路 减少6...
 
 
 

Copyright © 2001-2010 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
 

京ICP证:060528号