Подтвердить что ты не робот

Компиляция модулей python с определением DEBUG на MSVC

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

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

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

Спасибо

4b9b3361

Ответ 1

Из список python

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

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

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

Ответ 2

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

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

к

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

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

Ответ 3

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

Ответ 4

Основываясь на всех ответах, я успешно отключил _DEBUG временный:

#if _DEBUG
  #define _DEBUG_IS_ENABLED
  #undef _DEBUG
#endif
#include "pyconfig.h"
#if defined(_DEBUG_IS_ENABLED)
  #define _DEBUG
#endif

Ответ 5

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