如何用mingw编译python扩展

来源:互联网 发布:售价金额和算法 编辑:程序博客网 时间:2024/06/05 02:06

最近在用Python做一些东西,由于需要发布,所以要使用py2exe打包,不过发现python2.6打包后的文件不给力,在没有安装python或者vs2008的机器上无法运行,估计是dll不对。所以改用python2.5来做程序,发现挺好用的。

 

在用pypcap的时候发现上面发布的编译好的程序比较旧,有一些故障没有解决(比如阻塞还有就是readpkts包列表是同一个地址等问题),在trunk版本上已经解决了。所以需要编译一下。

 

由于使用了pyx格式的,按照install文件的提示,下载Pyrex ,winpcap(版本不用太新,防止目录结构变化)以及mingw,然后修改makefile文件,指明winpcap开发库的地址和正确的配置好pyrex调用,按照说明文件make,应该就可以了,不过提示了无法找到一些符号。

 

根据分析,原来是少了很重要的一个步骤,就是mingw的gcc需要连接.a文件,不能直接连接vs2003编译出来的文件。

 

关键部分出场了,找一个python的dll文件(activeState的好像没有,python官方安装有,所以随便找一个python25.dll就可以了),用pexports导出

pexports python25.dll > python25.def

然后用dlltool(mingw)自带的工具转换到.a文件

dlltool --dllname python25.dll --def python25.def --output-lib libpython25.a

把生成的libpython25.a放到python的libs下

 

再执行mingw32-make,果然顺利生成了pcap.pyd文件,其实就是dll文件啦。

执行python setup.py bdist_wininst,就可以看到打包后的文件了,也就是生成了一个描述文件再加上刚才的pyd文件,但是被封装成exe文件了,用户可以直接点击安装。