通过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符号。

有任何想法吗?


问题答案:

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位体系结构编译的。