windows下swig 写python扩展的麻烦事

来源:互联网 发布:新手windows建站 编辑:程序博客网 时间:2024/05/16 08:31

参照swig官方文档,用c写python 扩展的例子程序,没想到一波三折,碰到很多问题,反复baidu,google终于搞定,记录下来,也给像我这样初次接触swig的人提个醒.

 

我的环境:ActivePython 2.6.3.7   mingw

步骤如下:

 

1.安装swig,mingw,略,请参照官方文档,注意设置好环境变量

 

2.由于在编译时使用MinGW,因此需要一个类似UNIX的.a文件来作为运行库,而在Windows下,我们只能提供DLL,因此就需要有一个工具把DLL翻译到A文件,第一步,我们要导出DLL文件的定义,这里我们使用pexports,下载后解压,将bin目录下pexports.exe拷贝到Python的安装目录,在命令行下到达此目录,输入:
pexports python26.dll > python26.def


3.使用dlltools将def和dll文件转为a文件,dlltools在安装mingGW时就应该自动安装了,命令行下输入
dlltool --dllname python26.dll --def python26.def --output-lib libpython26.a

 

4.libpython26.a放到python安装目录libs/下,和 python26.lib同一个目录下,不然编译时会有"undefined reference to xxx"的错误

 

5.修改Python26/Lib/distutils/command/build_ext.py 文件把
self.compiler = new_compiler(None,  改为
self.compiler = new_compiler(self.compiler,

不然编译时会出现Unable to find vcvarsall.bat 错误    (这个是我google国外的帖子,某人提出的方法,不知道有其他的解决办法没)

 

6. 修改或创建/Python26/Lib/distutils/distutils.cfg  加入

    [build]

    compiler = mingw32

 

上面只列出需要注意的地方,其他的请参考官方文档.

 

参考url:

http://simonami.blogbus.com/logs/38061536.html
http://www.mingw.org/wiki/FAQ
http://boodebr.org/main/python/build-windows-extensions
http://docs.python.org/install/index.html#tweak-flags