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:Python26programasCython>python setup.py build_ext --inplace
I get an error saying that gcc has not an -mno-cygwin option:
> 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 is:
C:>gcc --version gcc (GCC) 4.7.0 20110430 (experimental) Copyright (C) 2011 Free Software Foundation, Inc.
How could I fix it?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
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 distutilscygwinccompiler.py in your Python directory to remove all instances of -mno-cygwin.
Method 2
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
1) Install tdm64-gcc-4.5.2.exe for 64-bit compilation
Apply patch to python.h
2) Modify python.h in C:python26include 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.
3) Eliminate all the parameters -mno-cygwin fom the call to gcc in the
Mingw32CCompiler class in Python26Libdistutilscygwinccompiler.py
4) 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.
5) 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…)
6) Copy python26.dll (located at Cwindowssystem32) to the user
directory (C:Usersmyname)
7) Produce the python26.def file with:
gendef.exe C:Usersmynamepython26.dll
8) Move the python.def file produced (located in the folder from where
gendef was executed) to the user directory
9) Produce the libpython.a with:
dlltool -v –dllname python26.dll –def C:Usersmyname
python26.def –output-lib C:Usersmynamelibpython26.a
10) Move the created libpython26.a to C:Python26libs
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)
12) Compile with
python setup.py build_ext –inplace
Done!
Method 3
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.
Method 4
Try this . It really works for the error
https://github.com/develersrl/gccwinbinaries
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0