通过GCC对Win64的Python扩展

通过GCC对Win64的Python扩展,python,windows,gcc,64-bit,mingw,Python,Windows,Gcc,64 Bit,Mingw,有没有人有幸使用mingw64为Windows编译64位Python扩展模块 我已经成功地用VS2008为这个平台编译了有问题的扩展。我还使用mingw32(32位python)编译了它。我希望两个版本都使用GCC 我已经使用Cygwin安装了mingw64-x86_64-w64 GCC 4.5.1工具集,并说服Python使用它们。然而,链接到python本身失败了 所以我选择了pexports0.44,用它转储一个python26.def文件并创建libpython26.a 现在,与中一样,

有没有人有幸使用mingw64为Windows编译64位Python扩展模块

我已经成功地用VS2008为这个平台编译了有问题的扩展。我还使用mingw32(32位python)编译了它。我希望两个版本都使用GCC

我已经使用Cygwin安装了mingw64-x86_64-w64 GCC 4.5.1工具集,并说服Python使用它们。然而,链接到python本身失败了

所以我选择了pexports0.44,用它转储一个
python26.def
文件并创建
libpython26.a

现在,与中一样,我从Python中得到的唯一链接错误是关于
\uu imp\u py\u InitModule4
。浏览def文件,我看到一个
Py\u InitModule4\u 64
符号


有什么想法吗?

Python中有一种机制可以防止将模块链接到错误版本的库。为64位体系结构编译库/模块时(请参阅modsupport.h),Py_InitModule4函数将重命名为Py_InitModule4_64(通过宏):


因此,如果您遇到此错误,这意味着您的Python库或Python模块是针对32位体系结构编译的,而另一个是针对64位体系结构编译的。

我发现您需要定义MS_WIN64以及WIN32,而且distutils包不理解mingw64,请参阅文章,还有一个


修补distutils以支持mingw64相当简单。

请参见Cython wiki上的。他们建议不要使用MinGW-64。

我建议您向MinGW-w64项目寻求帮助。他们通常反应很快。。。
#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