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