【问题标题】:Python extensions for Win64 via GCC通过 GCC 对 Win64 的 Python 扩展
【发布时间】:2010-09-23 12:32:02
【问题描述】:

有没有人使用 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 符号。

有什么想法吗?

【问题讨论】:

  • 我建议你向 mingw-w64 项目寻求帮助。他们通常反应灵敏......

标签: python windows gcc 64-bit mingw


【解决方案1】:

我发现你需要定义MS_WIN64和WIN32,而且distutils包不理解mingw64,见this帖子,和this一个

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

【讨论】:

    【解决方案2】:

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

    #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 位架构编译的。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2013-05-08
        • 1970-01-01
        • 2015-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-28
        • 2013-09-26
        • 1970-01-01
        相关资源
        最近更新 更多