编译在MSVC上定义的DEBUG的python模块

Dae*_*all 22 python debugging visual-c++

Python相当愚蠢地在其包含文件中有一个pragma指令,它python26_d.libDEBUG定义预处理程序变量时强制链接.这是一个问题,因为python安装程序没有附带python26_d.lib!所以我无法在调试模式下在msvc中构建应用程序.如果我暂时#undef DEBUG只有一个文件,我会收到很多关于DLL链接不一致的抱怨.如果我更改pythons包含文件中的pragma,我会获得对各种调试函数的未定义引用.

我已经尝试编译我自己的python版本,但它与分布式的python有些不同,我无法使用我的模块与使用vanilla版本的python构建的应用程序

任何人都可以给我任何关于如何绕过这个的建议吗?

谢谢

Pre*_*gha 21

python列表

作为解决此问题的方法,请尝试将文件python26.dll复制到python26_d.dll.(我不确定这会起作用;你说你正在调试模式下构建一个SWIG库,SWIG可能会尝试使用Python调试版的功能.如果是这样的话,你别无选择,只能这样做.使用Python的调试版本.)

编辑:来自评论:

您还应编辑pyconfig.h并注释掉"#define Py_DEBUG"行(第374行)

  • AHA!但如果您还编辑pyconfig.h并注释掉"#define Py_DEBUG"行(第374行),它确实有效.然后一切都很好.它仍然很烦人,你必须修改安装而不是你自己的代码,但它的工作原理.我已经选择了你的答案作为选择的答案,但如果你用这个提示更新你的答案会很好,以防其他人来看,因为他们不会期望部分解决方案在评论中.谢谢! (5认同)

小智 7

在第332行注释掉"#define Py_DEBUG"并修改后

#   ifdef _DEBUG
#    pragma comment(lib,"python26_d.lib")
#   else
Run Code Online (Sandbox Code Playgroud)

#   ifdef _DEBUG
#    pragma comment(lib,"python26.lib")
#   else
Run Code Online (Sandbox Code Playgroud)

你不再需要python26_d.lib了.