用cython和mingw编译会产生gcc:error:无法识别的命令行选项'

我正在尝试使用mingw(64位)在win 7 64位中编译一个带有cython的python扩展。
我正在使用Python 2.6(Active Python 2.6.6)以及足够的distutils.cfg文件(将mingw设置为编译器)

执行时

> C:Python26programasCython>python setup.py build_ext --inplace

我得到一个错误,说gcc没有-mno-cygwin选项:

> C:Python26programasCython>python setup.py build_ext --inplace
running build_ext
skipping 'hello2.c' Cython extension (up-to-date)
building 'hello2' extension
C:mingwbingcc.exe -mno-cygwin -mdll -O -Wall -IC:Python26include -IC:Python26PC -c hello2.c -o buildtemp.win-amd64-2.6Releasehello2.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.

我怎么修复它?


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


在解决这些问题的过程中,我发现我在这个线程中写了一个配方。 我在这里重现它,以防它可能对其他人有用:


一步一步的配方编译64位的cython扩展与python 2.6.6与mingw编译器在win 7 64位

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

将修补程序应用于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在Python26 Lib distutils cygwinccompiler.py中Mingw32CCompiler类中调用gcc
4)在同一模块中,当msc_ver =='1500'时,修改get_msvcr()返回一个空列表,而不是['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)按照cython教程(http://docs.cython.org/src/quickstart/build.html)中的说明创建一个测试hello.pyx文件和一个setup.py文件。
12)编译

python setup.py build_ext --inplace

完成!


这个bug现在已经在Python 2.7.6发布候选版本1中得到了修复。

补丁提交在这里。

解决的问题跟踪器线程在这里。

链接地址: http://www.djcxy.com/p/26299.html

上一篇: Compiling with cython and mingw produces gcc: error: unrecognized command line option '

下一篇: Errors while building/installing C module for Python 2.7