2013-09-10 1 views
9

Я пытаюсь скомпилировать библиотеку 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' 
+1

Я ненавижу, чтобы ответить мои собственные вопросы, но ... добавление -DMS_WIN64 на самом деле достаточно. Остальные проблемы были связаны с параметрами gcc (по какой-то причине -lpython27 должен идти прямо до -o myModule.pyd), которые не были в правильном порядке в моем проекте –

+0

Если вы играете, чтобы напомнить решение как свой собственный ответ, Я удалю свой ответ. (См. Http://meta.stackexchange.com/questions/90263/unanswered-question-answered-in-comments для определения того, почему это полезно.) Спасибо! – DreadPirateShawn

ответ

9

Копирование ответа из комментариев, чтобы удалить этот вопрос из фильтра «без ответа» :

Ненавижу отвечать на свои вопросы, но ... добавление -DMS_WIN64 на самом деле достаточно. Остальные проблемы были вызваны Gcc параметров (по какой-то причине -lpython27 должен идти прямо перед -o myModule.pyd), которые не были в правильном порядке, в моем проекте

~ ответ на Sergej Srepfler

 Смежные вопросы

  • Нет связанных вопросов^_^