Я пытаюсь скомпилировать библиотеку C для python на Windows7 (64-разрядная версия) с использованием mingw-x64. Все это работало как шарм с 32-битными версиями.библиотека python_x64 + C, скомпилированная с mingw_x64 в Windows7 Py_InitModule4
я скомпилировать свою библиотеку с НКУ -shared -IC: \ python27 \ включают -lc: \ python27 \ ЛИЭС myModule.c -lpython27 -o myModule.pyd
и он работал с 32-битным версии. Такая же процедура работает с 64-битным Linux. Но на 64-битной windows7 (с использованием 64-разрядное x86_64-w64-mingw32 и 64-битную питон 2.7.5) У меня есть проблема:
C:\Users\sergej\AppData\Local\Temp\cci8TbXw.o:myModule.c:(.text+0x267):
undefined reference to `__imp_Py_InitModule4'
collect2: ld returned 1 exit status
я проверил C: /Python27/libs/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
В настоящее время я не в курсе, что делать. Любое предложение? Код C здесь не является проблемой. У меня такая же проблема с примером из http://csl.name/C-functions-from-Python/
Примечания - опечатка в строке 26 в этом примере: должно быть переменным число аргументов
И да - я нашел (по аналогии с How can I build my C extensions with MinGW-w64 in Python? вопроса), что я могу собрать этот тривиальный пример, добавив -DMS_WIN64 в ССАГПЗ линии, но я все еще получил подобные ошибки в моей реальной программе (предполагая, есть больше к ней)
undefined reference to `__imp_PyArg_ParseTuple'
undefined reference to `__imp_Py_BuildValue'
undefined reference to `__imp_Py_InitModule4_64'
Я ненавижу, чтобы ответить мои собственные вопросы, но ... добавление -DMS_WIN64 на самом деле достаточно. Остальные проблемы были связаны с параметрами gcc (по какой-то причине -lpython27 должен идти прямо до -o myModule.pyd), которые не были в правильном порядке в моем проекте –
Если вы играете, чтобы напомнить решение как свой собственный ответ, Я удалю свой ответ. (См. Http://meta.stackexchange.com/questions/90263/unanswered-question-answered-in-comments для определения того, почему это полезно.) Спасибо! – DreadPirateShawn