Расширения Python для Win64 через GCC - PullRequest
8 голосов
/ 23 сентября 2010

Кому-нибудь повезло с компиляцией 64-битных модулей расширения Python для Windows с использованием mingw64?

Я успешно скомпилировал данное расширение с VS2008 для этой платформы. Я также скомпилировал его с помощью mingw32 (с 32-битным питоном). Я бы предпочел обе сборки использовать GCC.

Я установил набор инструментов GCC 4.5.1 mingw64-x86_64-w64 с помощью Cygwin и убедил Python их использовать. Однако ссылка на сам Python не удалась.

Итак, я взял pexports 0.44, использовал его для выгрузки файла python26.def и создания libpython26.a.

Теперь, как и в этом вопросе , единственная ошибка ссылки, которую я получаю от Python, касается __imp_py_InitModule4. Просматривая файл def, я вижу символ Py_InitModule4_64.

Есть идеи?

Ответы [ 3 ]

4 голосов
/ 21 апреля 2011

Я считаю, что вам нужно определить MS_WIN64, а также WIN32, пакет distutils также не понимает mingw64, см. этот пост и этот один

Patchingdistutils для поддержки mingw64 довольно тривиален.

3 голосов
/ 03 ноября 2010

В Python есть механизм, предотвращающий связывание модуля с неверной версией библиотеки. Функция Py_InitModule4 переименовывается в Py_InitModule4_64 (через макрос), когда библиотека / модуль компилируется для 64-битной архитектуры (см. Modsupport.h):

#if SIZEOF_SIZE_T != SIZEOF_INT
/* On a 64-bit system, rename the Py_InitModule4 so that 2.4
   modules cannot get loaded into a 2.5 interpreter */
#define Py_InitModule4 Py_InitModule4_64
#endif

Итак, если вы получаете эту ошибку, это означает, что ваша библиотека Python или ваш модуль Python скомпилированы для 32-битной архитектуры, а другой - для 64-битной архитектуры.

0 голосов
/ 30 апреля 2014

См. 64BitCythonExtensionsOnWindows в викитоне Cython.Они рекомендуют не использовать MinGW-64.

...