Cython не будет компилироваться в Windows 7 x64 - PullRequest
7 голосов
/ 08 августа 2011

Я борюсь с установкой Cython на Windows 7 x64. Я скачал и установил automated MinGW installer. Создал distutils.cfg в папке distutils со следующим содержимым:

[build]
compiler = mingw32

После добавления C:\MinGW\bin к переменным окружения я позвонил easy_install Cython, но я получаю следующие ошибки. Изнасилование в интернете действительно не дало мне полезных результатов, так как все эти компиляционные вещи (или я должен сказать sh * t?) для меня так ново.

c:\users\niklas\appdata\local\temp\easy_install-dgjjub\cython-0.15\cython\plex\scanners.o:Scanners.c:(.text+0x5d59): undefined reference to `_imp__PyObject_GetAttr'
c:\users\niklas\appdata\local\temp\easy_install-dgjjub\cython-0.15\cython\plex\scanners.o:Scanners.c:(.text+0x5dc5): undefined reference to `_imp__PyObject_GetAttr'
c:\users\niklas\appdata\local\temp\easy_install-dgjjub\cython-0.15\cython\plex\scanners.o:Scanners.c:(.text+0x5e31): undefined reference to `_imp__PyObject_GetAttr'
c:\users\niklas\appdata\local\temp\easy_install-dgjjub\cython-0.15\cython\plex\scanners.o:Scanners.c:(.text+0x5ebc): undefined reference to `_imp__PyObject_Call'
c:\users\niklas\appdata\local\temp\easy_install-dgjjub\cython-0.15\cython\plex\scanners.o:Scanners.c:(.text+0x5f08): undefined reference to `_imp__PyDict_New'
c:\users\niklas\appdata\local\temp\easy_install-dgjjub\cython-0.15\cython\plex\scanners.o:Scanners.c:(.text+0x5f49): undefined reference to `_imp__PyObject_SetAttr'
c:\users\niklas\appdata\local\temp\easy_install-dgjjub\cython-0.15\cython\plex\scanners.o:Scanners.c:(.text+0x5ffe): undefined reference to `_imp__PyErr_Occurred'
c:\users\niklas\appdata\local\temp\easy_install-dgjjub\cython-0.15\cython\plex\scanners.o:Scanners.c:(.text+0x6013): undefined reference to `_imp__PyExc_ImportError'
c:\users\niklas\appdata\local\temp\easy_install-dgjjub\cython-0.15\cython\plex\scanners.o:Scanners.c:(.text+0x601e): undefined reference to `_imp__PyErr_SetString'
c:\users\niklas\appdata\local\temp\easy_install-dgjjub\cython-0.15\cython\plex\scanners.o:Scanners.c:(.text+0x602d): undefined reference to `_imp__PyInt_FromLong'
collect2: ld returned 1 exit status
dllwrap: gcc exited with status 1
error: Setup script exited with error: command 'dllwrap' failed with exit status 1

Есть идеи, что не так? Спасибо!

UPDATE : Я использовал dlltools для создания libpython27.a, а затем снова попытался собрать Cython, и он просто отлично работал! Но теперь вызов cython.exe доставляет эту ошибку:

ImportError: DLL load failed, %1 is not a valid Win32-executable.

Полагаю, это потому, что я использую Pythonx64, а компилятор MinGW32? Итак, как я могу скомпилировать его для x64?

1 Ответ

10 голосов
/ 08 августа 2011

На этом сайте есть предварительно скомпилированные пакеты Cython . Я бы посоветовал вам перейти на x86 Python, вы не получите реального преимущества от использования версии x64. Если вы хотите придерживаться x64, вы не можете использовать MingW и вам нужно использовать компилятор MS SDK C ++ ( подробнее об этом ).

Не используйте MinGW-w64 . Как вы заметили, библиотека импорта MinGW для Python (например, libpython27.a) исключен из версии AMD64 Python. Это намеренно. Не пытайтесь сделать один, используя dlltool. [...] Также были проблемы с Mingw Runtime конфликтует со средой выполнения MSVC; это может произойти из мест, где вы не ожидайте, например, внутри библиотек времени выполнения для g ++ или gfortran.

...