通过GCC在Win64上编写Python扩展
有没有人成功用mingw64在Windows上编译64位的Python扩展模块?
我已经用VS2008成功编译了这个扩展模块,也用mingw32(配合32位的Python)编译过。我更希望两个版本都能用GCC来编译。
我通过Cygwin安装了mingw64-x86_64-w64 GCC 4.5.1工具集,并让Python使用它们。不过,链接到Python本身的时候失败了。
于是我下载了pexports 0.44,用它生成了一个python26.def
文件,并创建了libpython26.a
。
现在,正如在这个问题中提到的,我从Python得到的唯一链接错误是关于__imp_py_InitModule4
的。在查看def文件时,我发现里面有一个Py_InitModule4_64
的符号。
有什么想法吗?
3 个回答
0
请查看Cython维基上的64位Cython扩展在Windows上的内容。他们不建议使用MinGW-64。
3
在Python中,有一种机制可以防止将模块链接到错误版本的库。当库或模块为64位架构编译时,Py_InitModule4函数会通过一个宏被重命名为Py_InitModule4_64(可以在modsupport.h文件中找到):
#if SIZEOF_SIZE_T != SIZEOF_INT
/* On a 64-bit system, rename the Py_InitModule4 so that 2.4
modules cannot get loaded into a 2.5 interpreter */
#define Py_InitModule4 Py_InitModule4_64
#endif
所以,如果你遇到这个错误,说明你的Python库或者Python模块是为32位架构编译的,而另一个则是为64位架构编译的。