Компиляция с использованием cython и mingw создает gcc: ошибка: непризнанная опция командной строки '-mno-cygwin'
Я пытаюсь скомпилировать расширение python с помощью cython в win 7 64-bit, используя mingw (64-разрядный).
Я работаю с 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.
Как я могу это исправить?
Ответы
Ответ 1
Похоже, что GCC 4.7.0 наконец удалил устаревший вариант -mno-cygwin
, но distutils еще не догнал его. Либо установите более старую версию MinGW, либо отредактируйте distutils\cygwinccompiler.py
в каталоге Python, чтобы удалить все экземпляры -mno-cygwin
.
Ответ 2
В процессе решения этих и следующих проблем я нашел, я написал рецепт в этой теме. Я воспроизвожу его здесь, если он может быть полезен для других:
Пошаговый рецепт для компиляции 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
Изменить 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-битный питон)
Редактировать 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) пользователю
directory (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 tutorial (http://docs.cython.org/src/quickstart/build.html)
12) Скомпилировать с помощью
python setup.py build_ext --inplace
Готово!
Ответ 3
Эта ошибка теперь исправлена в кандидате на выпуск Python 2.7.6.
Патч-фиксация здесь.
Решающий поток отслеживаемых проблем здесь.
Ответ 4
Попробуйте это. Это действительно работает для ошибки
https://github.com/develersrl/gccwinbinaries