有没有人有幸用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。
现在,和在this question中一样,我从Python中得到的唯一链接错误是关于__imp_py_InitModule4的。浏览def文件时,我看到一个Py_InitModule4_64符号。
有什么想法吗?
发布于 2010-11-03 17:14:57
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位架构编译的。
发布于 2011-04-21 23:33:37
我发现您需要定义MS_WIN64以及WIN32,而且distutils包不理解mingw64,请参阅this post和this one
修补distutil以支持mingw64是相当简单的。
发布于 2014-04-30 22:35:05
请参阅Cython wiki上的64BitCythonExtensionsOnWindows。他们建议不要使用MinGW-64。
https://stackoverflow.com/questions/3778370
复制相似问题