通过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文件,并创buildlibpython26.a

现在,正如在这个问题中 ,我从Python获得的唯一链接错误是关于__imp_py_InitModule4 。 浏览def文件,我看到一个Py_InitModule4_64符号。

有任何想法吗?

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

 #if SIZEOF_SIZE_T != SIZEOF_INT /* On a 64-bit system, rename the Py_Initmodulee4 so that 2.4 modules cannot get loaded into a 2.5 interpreter */ #define Py_Initmodulee4 Py_Initmodulee4_64 #endif 

所以,如果你得到这个错误,这意味着你的Python库,或者你的Python模块被编译为32位体系结构,而另一个被编译为64位体系结构。

我发现你需要定义MS_WIN64以及WIN32,也distutils包不明白mingw64,看到这个职位, 这一个

补丁distutils支持mingw64是相当微不足道的。

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