[python] cython 및 mingw로 컴파일하면 gcc가 생성됩니다 : 오류 : 인식 할 수없는 명령 줄 옵션 ‘-mno-cygwin’

mingw (64 비트)를 사용하여 win 7 64 비트에서 cython으로 파이썬 확장을 컴파일하려고합니다.
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.

어떻게 고칠 수 있습니까?



답변

GCC 4.7.0이 마침내 사용되지 않는 -mno-cygwin옵션을 제거한 것처럼 들리지만 distutils는 아직이를 따라 잡지 못했습니다. 약간 이전 버전의 MinGW를 설치하거나 distutils\cygwinccompiler.pyPython 디렉토리에서 -mno-cygwin.


답변

이 문제를 해결하는 과정과 내가 찾은 다음 문제를 해결하는 동안 이 스레드에 레시피를 작성했습니다 . 다른 사람에게 유용 할 수있는 경우를 대비하여 여기에서 재현합니다.


Win 7 64 비트에서 mingw 컴파일러를 사용하여 Python 2.6.6으로 64 비트 cython 확장을 컴파일하는 단계별 레시피

mingw 컴파일러 설치
1) 64 비트 컴파일 용 tdm64-gcc-4.5.2.exe 설치

python.h에 패치 적용
2) http://bugs.python.org/file12411/mingw-w64.patch에 표시된대로 C : \ python26 \ include에서 python.h를 수정합니다.

distutils
수정 2013 편집 : python 2.7.6 및 3.3.3에서보다 -mno-cygwin이 마침내 제거되었으므로 3 단계를 건너 뛸 수 있습니다 .

3) Python26 \ Lib \ distutils \ cygwinccompiler.py의 Mingw32CCompiler 클래스에서 gcc를 호출 할 때 모든 매개 변수 -mno-cygwin을 제거합니다.
4) 동일한 모듈에서 [ ‘msvcr90 대신 빈 목록을 반환하도록 get_msvcr ()을 수정합니다. ‘] msc_ver ==’1500 ‘.

libpython26.a 파일 생성 (64 비트 python에 포함되지 않음)
2013 편집 : gohlke 에서 libpython26.a를 다운로드하여 설치하면 다음 5-10 단계를 건너 뛸 수 있습니다 .

5) mingw-w64-bin_x86_64- mingw_20101003_sezero.zip에서 gendef.exe를 얻습니다 (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) cython 자습서 ( http://docs.cython.org/src/quickstart/build.html )에 표시된대로 테스트 hello.pyx 파일과 setup.py 파일을 만듭니다.
12) 다음으로 컴파일합니다.

python setup.py build_ext –inplace

끝난!


답변

이 버그는 이제 Python 2.7.6 릴리스 후보 1 에서 수정되었습니다 .

패치 커밋은 여기에 있습니다 .

해결 된 문제 추적기 스레드는 여기에 있습니다 .


답변

이 시도 . https://github.com/develersrl/gccwinbinaries 오류에 대해 실제로 작동합니다.


답변