Компиляция модулей Python с DEBUG, определенной в MSVC - PullRequest
22 голосов
/ 06 августа 2009

Python довольно глупо имеет директиву pragma в своих включаемых файлах, которая устанавливает ссылку на python26_d.lib, когда определена переменная препроцессора DEBUG. Это проблема, потому что установщик Python не поставляется с python26_d.lib! Поэтому я не могу создавать приложения в msvc в режиме отладки. Если я временно #undef DEBUG только для одного файла, я получаю много жалоб на непоследовательную связь DLL. Если я изменю прагму в файле включения pythons, я получу неопределенные ссылки на различные функции отладки.

Я попытался скомпилировать свою собственную версию python, но она несколько отличается от распространяемого python, поэтому я не могу использовать свои модули в приложениях, созданных с использованием ванильной версии python

Кто-нибудь может дать мне какой-нибудь совет, как это обойти?

Спасибо

Ответы [ 5 ]

21 голосов
/ 06 августа 2009

Из список питонов

В качестве обходного пути попробуйте скопировать файл python26.dll в python26_d.dll. (Я не уверен в этом буду работать; Вы говорите, что строите SWIG библиотека в режиме отладки, и это Возможно, что SWIG попытается использовать особенности отладки Python версия. Если это так, вы будете нет другого выбора, кроме как использовать отладочная версия Python.)

Редактировать: Из комментариев:

Вы также должны отредактировать pyconfig.h и закомментируйте строку "#define Py_DEBUG "(строка 374)

7 голосов
/ 23 августа 2010

После того, как вы закомментируете "#define Py_DEBUG" в строке 332 и измените

#   ifdef _DEBUG
#    pragma comment(lib,"python26_d.lib")
#   else

до

#   ifdef _DEBUG
#    pragma comment(lib,"python26.lib")
#   else

вам больше не нужно python26_d.lib.

4 голосов
/ 30 сентября 2014

На основании всех ответов я успешно отключил _DEBUG временно:

#if _DEBUG
  #define _DEBUG_IS_ENABLED
  #undef _DEBUG
#endif
#include "pyconfig.h"
#if defined(_DEBUG_IS_ENABLED)
  #define _DEBUG
#endif
4 голосов
/ 16 марта 2010

Вы также можете пойти другим путем: переключиться на «Release» и затем отладить его. вам нужно включить генерацию информации об отладочных символах в свойствах проекта в настройках компилятора и компоновщика; MSDN здесь точно скажет, какие параметры нужно установить для отладки сборки выпуска.

2 голосов
/ 03 февраля 2010

Это работает также при связывании со статическими библиотеками. Я сделал копию python26.lib и переименовал ее в python26_d.lib. Я закомментировал строку #define PY_DEBUG в pyconfig.h. Также изменил прагму на "комментарий прагмы (lib," python26.lib ")" в строке 332. Вуаля! Это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...