Python rather stupidly has a pragma directive in its include files that forces a link against python26_d.lib
when the DEBUG
preprocessor variable i
From python list
As a workaround to the situation, try to copy the file python26.dll to python26_d.dll. (I'm not sure this will work; you say you are building a SWIG library in debug mode, and it's possible that SWIG will try to use features of the Python debugging version. If that's the case, you'll have no choice but to use the debugging version of Python.)
Edit: From comments:
You should also edit pyconfig.h and comment out the line "#define Py_DEBUG" (line 374)
Based on all answers I successfully disabled _DEBUG
temporary:
#if _DEBUG
#define _DEBUG_IS_ENABLED
#undef _DEBUG
#endif
#include "pyconfig.h"
#if defined(_DEBUG_IS_ENABLED)
#define _DEBUG
#endif
You can also go the other way: switch to «Release» and then debug it. you need to enable generation of debugging symbols info in project properties in compiler and linker prefs; MSDN here will tell you exactly what options you need to set to debug a release build.
After you comment out "#define Py_DEBUG" on line 332 and modify
# ifdef _DEBUG
# pragma comment(lib,"python26_d.lib")
# else
to
# ifdef _DEBUG
# pragma comment(lib,"python26.lib")
# else
you do not need to python26_d.lib anymore.
This works also when linking with static libraries. I made a copy of python26.lib, and renamed it python26_d.lib. I commented out the line #define PY_DEBUG in pyconfig.h. Also changed the pragma to "pragma comment(lib,"python26.lib")" on line 332. Voila! It worked.