Компиляция с Cython и Mingw приводит к gcc: error: нераспознанная опция командной строки '-mno-cygwin' - PullRequest
114 голосов
/ 17 мая 2011

Я пытаюсь скомпилировать расширение Python с помощью Cython в Win 7 64-bit, используя mingw (64-bit).
Я работаю с 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.

Как я мог это исправить?

Ответы [ 4 ]

181 голосов
/ 17 мая 2011

Похоже, что GCC 4.7.0 окончательно удалил устаревшую опцию -mno-cygwin, но distutils еще не догнал ее. Установите чуть более старую версию MinGW или отредактируйте distutils\cygwinccompiler.py в своем каталоге Python, чтобы удалить все экземпляры -mno-cygwin.

11 голосов
/ 03 марта 2013

В процессе решения этих и следующих проблем я нашел рецепт в этой теме . Я воспроизвожу это здесь на случай, если это может быть полезно для других:


Пошаговый рецепт для компиляции 64-битных расширений Cython с помощью Python. 2.6.6 с компилятором mingw в win 7 64-bit

Установить компилятор mingw
1) Установите tdm64-gcc-4.5.2.exe для 64-битной компиляции

Применить исправление к python.h
2) Измените python.h в C: \ python26 \ include, как указано в http://bugs.python.org/file12411/mingw-w64.patch

Изменить distutils
Edit 2013: обратите внимание, что в python 2.7.6 и 3.3.3 -mno-cygwin окончательно удален, поэтому шаг 3 можно пропустить .

3) Устранить все параметры -mno-cygwin для вызова gcc в Класс Mingw32CCompiler в Python26 \ Lib \ distutils \ cygwinccompiler.py
4) В том же модуле измените get_msvcr (), чтобы получить пустой список вместо ['msvcr90'], когда msc_ver == '1500'.

Создание файла libpython26.a (не входит в состав 64-битного Python)
Редактировать 2013: следующие шаги 5-10 можно пропустить, загрузив и установив libpython26.a из gohlke .

5) Получить gendef.exe из mingw-w64-bin_x86_64- 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) Создайте тестовый файл hello.pyx и файл setup.py, как указано в Учебник по Cython (http://docs.cython.org/src/quickstart/build.html)
12) Компилировать с

python setup.py build_ext --inplace

Готово!

9 голосов
/ 08 ноября 2013

Эта ошибка была исправлена ​​в Кандидат на выпуск Python 2.7.6 1 .

Здесь зафиксировано .

* 1008тема отслеживания проблем здесь .
0 голосов
/ 18 марта 2014

Попробуй это. Это действительно работает для ошибки
https://github.com/develersrl/gccwinbinaries

...