Estou tentando compilar uma extensão python com cython no win 7 de 64 bits usando o mingw (64 bits).
Estou trabalhando com Python 2.6 (Active Python 2.6.6) e com o arquivo distutils.cfg adequado (definindo mingw como compilador)
Ao executar
> C:\Python26\programas\Cython>python setup.py build_ext --inplace
Recebo um erro dizendo que o gcc não tem uma opção -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.
Como eu poderia consertar?
Respostas:
Parece que o GCC 4.7.0 finalmente removeu a
-mno-cygwin
opção obsoleta , mas distutils ainda não a atualizou. Instale uma versão um pouco mais antiga do MinGW ou editedistutils\cygwinccompiler.py
em seu diretório Python para remover todas as instâncias de-mno-cygwin
.fonte
ld
erro que obteve? Encontrei o mesmo erro e estou lutando para classificá-lo.Durante o processo de resolução desses e dos seguintes problemas que encontrei, escrevi uma receita neste tópico . Eu reproduzo aqui caso possa ser útil para outros:
Receita passo a passo para compilar extensões cython de 64 bits com python 2.6.6 com compilador mingw no win 7 de 64 bits
Instale o compilador mingw
1) Instale tdm64-gcc-4.5.2.exe para compilação de 64 bits
Aplique o patch a python.h
2) Modifique python.h em C: \ python26 \ include conforme indicado em http://bugs.python.org/file12411/mingw-w64.patch
Modificar distutils
Editar 2013: Observe que em python 2.7.6 e 3.3.3 -mno-cygwin foi finalmente removido, então a etapa 3 pode ser ignorada .
3) Elimine todos os parâmetros -mno-cygwin da chamada para gcc na classe Mingw32CCompiler em Python26 \ Lib \ distutils \ cygwinccompiler.py
4) No mesmo módulo, modifique get_msvcr () para retornar uma lista vazia em vez de ['msvcr90 '] quando msc_ver ==' 1500 '.
Produza o arquivo libpython26.a (não incluído no python de 64 bits)
Editar 2013: as seguintes etapas 5 a 10 podem ser ignoradas baixando e instalando libpython26.a de gohlke .
5) Obtenha gendef.exe de mingw-w64-bin_x86_64- mingw_20101003_sezero.zip (gendef.exe não está disponível na distribuição tmd64. Outra solução é compilar gendef da fonte ...)
6) Copiar python26.dll (localizado em C \ windows \ system32) para o diretório do usuário (C: \ Users \ myname)
7) Produza o arquivo python26.def com:
8) Mova o arquivo python.def produzido (localizado na pasta de onde gendef foi executado) para o diretório do usuário
9) Produza o libpython.a com:
10) Mova o libpython26.a criado para C: \ Python26 \ libs
Produza sua extensão .pyd
11) Crie um arquivo de teste hello.pyx e um arquivo setup.py conforme indicado no tutorial cython ( http://docs.cython.org/src/quickstart/build.html )
12) Compile com
Feito!
fonte
numpy/distutils
pasta, tanto paramingw32compiler.py
.Este bug foi corrigido no Python 2.7.6 Release Candidate 1 .
O commit do patch está aqui .
O tópico resolvido do rastreador de problemas está aqui .
fonte
Experimente isso. Realmente funciona para o erro
https://github.com/develersrl/gccwinbinaries
fonte