Compiling with cython and mingw produces gcc: error: unrecognized command line option '-mno-cygwin'

Question:

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?

Asked By: joaquin

||

Answers:

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.

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!

Answered By: joaquin

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.

Answered By: Michael

Try this . It really works for the error
https://github.com/develersrl/gccwinbinaries

Answered By: Selva
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.