通过GCC对Win64的Python扩展

2024-05-15 13:42:29 发布

您现在位置:Python中文网/ 问答频道 /正文

有谁有幸使用mingw64编译64位Python扩展模块for Windows?在

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

我已经使用Cygwin安装了mingw64-x86_64-w64gcc4.5.1工具集,并说服Python使用它们。但是,链接到python本身失败了。在

所以我选择了pexports 0.44,用它转储一个python26.def文件并创建libpython26.a。在

现在,就像在this question中一样,我从Python得到的唯一链接错误是关于__imp_py_InitModule4。浏览def文件时,我看到一个Py_InitModule4_64符号。在

有什么想法吗?在


Tags: 模块文件版本for链接windowsdef平台
3条回答

请参见cythonwiki上的64BitCythonExtensionsOnWindows。他们建议不要使用MinGW-64。在

我发现您需要定义msuwin64和WIN32,distutils包不理解mingw64,请参见thispost和{a2}one

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

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

相关问题 更多 >