Compiling with cython and mingw produces gcc: error: unrecognized command line option '-mno-cygwin'
PythonMingwDistutilsCythonPython Problem Overview
I'm trying to compile a python extension with cython in win 7 64-bit using mingw (64-bit).
I'm working with Python 2.6 (Active Python 2.6.6) and with the adequate distutils.cfg file (setting mingw as the compiler)
When executing
> C:\Python26\programas\Cython>python setup.py build_ext --inplace
I get an error saying that gcc has not an -mno-cygwin option:
> 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 is:
C:\>gcc --version
gcc (GCC) 4.7.0 20110430 (experimental)
Copyright (C) 2011 Free Software Foundation, Inc.
How could I fix it?
Python Solutions
Solution 1 - Python
It sounds like GCC 4.7.0 has finally removed the deprecated -mno-cygwin
option, but distutils has not yet caught up with it. Either install a slightly older version of MinGW, or edit distutils\cygwinccompiler.py
in your Python directory to remove all instances of -mno-cygwin
.
Solution 2 - Python
During the process of solving these and the following problems I found, I wrote a recipe in this thread. I reproduce it here in case it could be of utility for others:
Step by step recipe to compile 64-bit cython extensions with python 2.6.6 with mingw compiler in win 7 64-bit
Install mingw compiler
- Install tdm64-gcc-4.5.2.exe for 64-bit compilation
Apply patch to python.h
2) Modify python.h in C:\python26\include as indicated in
http://bugs.python.org/file12411/mingw-w64.patch
Modify distutils
Edit 2013: Note than in python 2.7.6 and 3.3.3 -mno-cygwin has been finally removed so step 3 can be skipped.
- Eliminate all the parameters -mno-cygwin fom the call to gcc in the Mingw32CCompiler class in Python26\Lib\distutils\cygwinccompiler.py
- In the same module, modify get_msvcr() to return an empty list instead of ['msvcr90'] when msc_ver == '1500' .
Produce the libpython26.a file (not included in 64 bit python)
Edit 2013: the following steps 5-10 can be skipped by downloading and installing libpython26.a from gohlke.
-
Obtain gendef.exe from mingw-w64-bin_x86_64- mingw_20101003_sezero.zip (gendef.exe is not available in the tmd64 distribution. Another solution is to compile gendef from source...)
-
Copy python26.dll (located at C\windows\system32) to the user directory (C:\Users\myname)
-
Produce the python26.def file with: > gendef.exe C:\Users\myname\python26.dll
-
Move the python.def file produced (located in the folder from where gendef was executed) to the user directory
-
Produce the libpython.a with: > dlltool -v --dllname python26.dll --def C:\Users\myname \python26.def --output-lib C:\Users\myname\libpython26.a
-
Move the created libpython26.a to C:\Python26\libs
Produce your .pyd extension
11) Create a test hello.pyx file and a setup.py file as indicated in
cython tutorial (http://docs.cython.org/src/quickstart/build.html)
- Compile with > python setup.py build_ext --inplace
Done!
Solution 3 - Python
This bug has now been fixed in Python 2.7.6 release candidate 1.
The patching commit is here.
The resolved issue tracker thread is here.
Solution 4 - Python
Try this . It really works for the error
https://github.com/develersrl/gccwinbinaries