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


114

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.

어떻게 고칠 수 있습니까?


여기 에 링크가 있습니다 ! 즉 최근의 사이 썬과는 MinGW의 문제 해결
Indrajit Kanjilal

답변:


181

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


10
감사합니다 Ignacio. 나는 이미이 솔루션을 직접 시도했습니다 (cygwinccompyler에서 -mno-cygwin을 제거하기 위해). 오류가 사라졌지 만 ld에서 다른 오류가 발생했습니다. 그러나 이것은 다른 질문입니다. 내일 게시하겠습니다. 이제 휴식이 필요합니다 ... 왜 윈도우에서 컴파일하기가 그렇게 어려운가요?
호아킨

7
이것이 나를 위해 일한 것입니다. 나는 Ignacio의 지시를 그대로 따랐다. cygwincompile.py 파일에서 "-mno-cygwin"문자열의 4 개 인스턴스를 ""로 대체
Ram Narasimhan

4
@joaquin : ld발생한 오류 를 정렬 할 수 있었습니까 ? 동일한 오류가 발생하여 정렬하는 데 어려움을 겪고 있습니다.
robintw 2013 년

@robintw 맞아요. 그 순간 레시피를 게시했습니다 (찾았습니다!). 편집을 참조하십시오
joaquin 2013 년

2
Python 2.7.9가이 문제를 해결했습니다. Python 2.7.8에는 여전히 있습니다.
fx-kirin 2015 년

11

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


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

끝난!


win64 python27에서 1 단계를 수행했습니다. 그런 다음 시도하고 cython이 성공적으로 설치되었습니다. 나는 2 단계에서 패치를 어떻게 처리할지 아무 생각도 없었다
craastad

@Chris Raastad. 흥미 롭군. 그러나 이것은 cython 설치에 관한 것이 아니라 cython이 스크립트를 컴파일하는 것에 관한 것입니다. 당신이 그 뜻인지 확실하지 않습니다. 어쨌든, 이틀 전에 robintw로부터 ld 오류가 있다는 의견이있었습니다. 따라서 실제로 mingw가 작동하는 경우 설치하는 버전과 이미 설치 한 라이브러리에 따라 첫 번째 샷에서 진행되거나 오류가 발생하는 경우가있을 수 있습니다.
joaquin 2013 년

1
+1 유용한 답변입니다. numpy를 사용하는 확장의 경우 numpy/distutils폴더 내의 옵션을 해킹해야 했습니다 mingw32compiler.py.
Caleb Hattingh 2010 년

python27에서는 cygwinccompiler.py 파일에 추가하여 MS_WIN64를 정의해야하는 것 같습니다. 여기를 참조하십시오 : stackoverflow.com/a/19867426/2136991
David

OP를 연결하는 질문에서 @David는 python27이 아닌 python26을 나타냅니다. 제 조리법을 정확히 따르 셨지만 여전히 참조하시는 변경이 필요하십니까?
joaquin 2013


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.