问题:使用cython和mingw进行编译会产生gcc:错误:无法识别的命令行选项’-mno-cygwin’
我正在尝试使用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.
我该如何解决?
回答 0
听起来好像GCC 4.7.0终于删除了不推荐使用的-mno-cygwin
选项,但是distutils尚未赶上它。请安装较旧版本的MinGW,或者distutils\cygwinccompiler.py
在Python目录中进行编辑以删除的所有实例-mno-cygwin
。
回答 1
在解决我发现的这些问题和以下问题的过程中,我在此线程中编写了一个配方。我在这里复制它,以防它可能对其他人有用:
在Win 7 64位中使用mingw编译器使用python 2.6.6逐步编译64位cython扩展的配方
安装mingw编译器
1)安装tdm64-gcc-4.5.2.exe进行64位编译
将补丁应用到python.h
2)按照http://bugs.python.org/file12411/mingw-w64.patch中的指示在C:\ python26 \ include中修改python.h
修改distutils
Edit 2013:注意,比python 2.7.6和3.3.3–mno-cygwin最终已被删除,因此可以跳过第3步。
3)在Python26 \ Lib \ distutils \ cygwinccompiler.py中删除Mingw32CCompiler类中对gcc的调用中的所有参数-mno-cygwin
4)在同一模块中,修改get_msvcr()以返回空列表,而不是[‘msvcr90 ‘]当msc_ver ==’1500’时。
产生libpython26.a文件(64位python中不包括)
编辑2013:通过从gohlke下载并安装libpython26.a可以跳过以下步骤5-10。
5)从mingw-w64-bin_x86_64- mingw_20101003_sezero.zip中获取gendef.exe(tmd64发行版中不提供gendef.exe。另一种解决方案是从源代码编译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
做完了!
回答 2
回答 3
试试这个 。它确实适用于错误
https://github.com/develersrl/gccwinbinaries