使用cython和mingw进行编译会产生gcc:错误:无法识别的命令行选项'-mno-cygwin'

时间:2011-05-17 16:59:16

标签: python mingw distutils cython

我正在尝试使用mingw(64位)在win 7 64位中使用cython编译python扩展。
我正在使用Python 2.6(Active Python 2.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.

我该如何解决?

4 个答案:

答案 0 :(得分:180)

听起来GCC 4.7.0最终删除了已弃用的-mno-cygwin选项,但是distutils还没有赶上它。安装较旧版本的MinGW,或在Python目录中编辑distutils\cygwinccompiler.py以删除-mno-cygwin的所有实例。

答案 1 :(得分:11)

在解决这些以及我发现的以下问题的过程中,我在this thread写了一个食谱。我在这里重现它,以防它对其他人有用:


使用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,如下所示 http://bugs.python.org/file12411/mingw-w64.patch

修改distutils
编辑2013:注意比python 2.7.6和3.3.3 -mno-cygwin最终被删除所以可以跳过步骤3

3)消除所有参数-mno-cygwin来调用gcc中的gcc Python26 \ Lib \ distutils \ cygwinccompiler.py中的Mingw32CCompiler类 4)在同一模块中,修改get_msvcr()以返回空列表 当msc_ver =='1500'时,而不是['msvcr90']。

生成libpython26.a文件(不包含在64位python中)
编辑2013:通过从gohlke 下载并安装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 --output-lib C:\ Users \ myname \ libpython26.a

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

制作.pyd扩展程序
11)创建一个测试hello.pyx文件和一个setup.py文件,如下所示 cython tutorial(http://docs.cython.org/src/quickstart/build.html
12)编译

  

python setup.py build_ext --inplace

完成!

答案 2 :(得分:9)

此错误现已在Python 2.7.6 release candidate 1修复。

修补提交是here

已解决的问题跟踪器主题是here

答案 3 :(得分:-2)

试试这个。它真的适用于错误
https://github.com/develersrl/gccwinbinaries