Python 使用cython和mingw编译会产生gcc:error:unrecognized command line option'-mno cygwin';

Python 使用cython和mingw编译会产生gcc:error:unrecognized command line option'-mno cygwin';,python,mingw,distutils,cython,Python,Mingw,Distutils,Cython,我正在尝试使用mingw(64位)在win 7 64位中使用cython编译python扩展。 我正在使用Python2.6(活动Python2.6.6)和适当的distutils.cfg文件(将mingw设置为编译器) 执行时 > C:\Python26\programas\Cython>python setup.py build_ext --inplace 我得到一个错误,说gcc没有-mno cygwin选项: > C:\Python26\programas\Cytho

我正在尝试使用mingw(64位)在win 7 64位中使用cython编译python扩展。
我正在使用Python2.6(活动Python2.6.6)和适当的distutils.cfg文件(将mingw设置为编译器)

执行时

> C:\Python26\programas\Cython>python setup.py build_ext --inplace
我得到一个错误,说gcc没有-mno cygwin选项:

> C:\Python26\programas\Cython>python setup.py build_ext --inplace
running build_ext
skipping 'hello2.c' Cython extension (up-to-date)
building 'hello2' extension
C:\mingw\bin\gcc.exe -mno-cygwin -mdll -O -Wall -IC:\Python26\include -IC:\Python26\PC -c hello2.c -o build\temp.win-amd64-2.6\Release\hello2.o
gcc: error: unrecognized command line option '-mno-cygwin'
error: command 'gcc' failed with exit status 1
gcc是:

C:\>gcc --version
gcc (GCC) 4.7.0 20110430 (experimental)
Copyright (C) 2011 Free Software Foundation, Inc.

我如何修复它呢?

听起来GCC4.7.0终于删除了弃用的
-mno cygwin
选项,但distutils还没有跟上。安装稍旧一点的MinGW版本,或者在Python目录中编辑
distutils\cygwingcompiler.py
,以删除
-mno cygwin

的所有实例。在解决这些问题以及我发现的以下问题的过程中,我在中编写了一个配方。我在这里复制它,以防对其他人有用:


使用python逐步编译64位cython扩展的方法 2.6.6在win 7 64位中使用mingw编译器

安装mingw编译器
1) 安装tdm64-gcc-4.5.2.exe进行64位编译

将修补程序应用于python.h
2) 在C:\python26\include中修改python.h,如中所示

修改distutils
编辑2013:请注意,python 2.7.6和3.3.3中的情况有所不同——mno cygwin最终被删除,因此可以跳过步骤3

3) 消除所有参数-mno cygwin fom在 Python26\Lib\distutils\cygwincompiler.py中的mingw32compiler类
4) 在同一模块中,修改get_msvcr()以返回空列表 当msc_ver=='1500'时,代替['msvcr90']

生成libpython26.a文件(不包括在64位python中)
编辑2013:从下载并安装libpython26.a可以跳过以下步骤5-10

5) 从mingw-w64-bin_x86_64获取gendef.exe- mingw_20101003_sezero.zip (gendef.exe在tmd64发行版中不可用。其他 解决方案是从源代码中编译gendef…
6) 将python26.dll(位于C\windows\system32)复制到用户 目录(C:\Users\myname)
7) 使用以下内容生成python26.def文件:

gendef.exe C:\Users\myname\python26.dll

8) 移动生成的python.def文件(位于 已执行gendef)到用户目录
9) 使用以下内容生成libpython.a:

dlltool-v--dllname python26.dll--def C:\Users\myname \python26.def——输出库C:\Users\myname\libpython26.a

10) 将创建的libpython26.a移动到C:\Python26\libs

生成.pyd扩展名
11) 创建test hello.pyx文件和setup.py文件,如中所示 cython教程()
12) 编译

python setup.py build_ext--inplace


完成了

此错误现已在中修复

补丁提交是


已解决的问题跟踪线程为。

请尝试此操作。它确实适用于错误

谢谢伊格纳西奥。我自己已经尝试过这个解决方案(从cygwinccompyler中删除-mno cygwin)。错误消失了,但是我在ld上得到了一个不同的错误。但这是一个不同的问题。我明天寄。现在需要休息一下。。。为什么在windows下编译如此困难?这就是我的工作原理。我一字不差地听从了伊格纳西奥的指示。将cygwincompile.py中字符串“-mno cygwin”的4个实例替换为“”file@joaquin:您是否对您得到的
ld
错误进行了排序?我也遇到了同样的错误,我正在努力整理它。@robintw是的。当时我发布了一份食谱(我找到了!)。请参阅editPython 2.7.9已解决此问题。Python2.7.8仍然拥有它,我在win64 python27上完成了步骤1。然后我试了一下,cython安装成功了。“我不知道第二步的补丁该怎么办。”克里斯·拉斯塔德。有趣。但这不是关于cython安装,而是关于cython编译脚本。不知道你是不是那个意思。无论如何,两天前robintw发表了关于ld错误的评论。因此,如果你真的让mingw工作,可能这取决于你安装的版本,也可能取决于你已经安装的库,你会在第一次尝试时就去尝试,或者你会被错误所困扰。+1这是一个有用的答案。对于使用numpy的扩展,我还必须破解
numpy/distutils
文件夹中的选项,这两个选项都是
mingw32compiler.py
。在python27中,似乎必须通过将其添加到cygwincompiler.py文件来定义MS_WIN64。请看这里:@David在你链接的问题中,OP指的是python26,而不是python27。你完全按照我的食谱做了,还需要做你提到的改变吗?这是我的建议!用最新的Cython和MingW解决了问题