【问题标题】:Compiling python modules with DEBUG defined on MSVC使用 MSVC 上定义的 DEBUG 编译 python 模块
【发布时间】:2009-08-05 22:16:28
【问题描述】:

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

我曾尝试编译我自己的 python 版本,但它与分发的 python 有很大不同,我无法将我的模块与使用普通版 python 构建的应用程序一起使用

谁能给我任何关于如何解决这个问题的建议?

【问题讨论】:

标签: python debugging visual-c++


【解决方案1】:

来自python list

作为解决这种情况的方法,请尝试 将文件 python26.dll 复制到 python26_d.dll。 (我不确定这个 将工作;你说你正在建造一个 SWIG 库处于调试模式,它是 SWIG 可能会尝试使用 Python调试的特点 版本。如果是这样的话,你会 别无选择,只能使用 Python 的调试版本。)

编辑:来自 cmets:

您还应该编辑 pyconfig.h 和 注释掉“#define”这一行 Py_DEBUG”(第 374 行)

【讨论】:

  • 谢谢,但它不起作用。如果我这样做,我也会得到未解决的外部问题。
  • 啊哈!但是,如果您还编辑 pyconfig.h 并注释掉“#define Py_DEBUG”行(第 374 行),它确实有效。然后一切都很好。您必须修改安装而不是您自己的代码仍然很烦人,但它确实有效。我已选择您的答案作为所选答案,但如果您使用此提示更新您的答案会很好,以防其他人前来查看,因为他们不希望部分解决方案出现在评论中。谢谢!
  • @DaedalusFall:把这条指令放在答案中,我想投票!有完全相同的问题,您的解决方案似乎工作正常。
【解决方案2】:

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

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

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

您不再需要 python26_d.lib。

【讨论】:

    【解决方案3】:

    您也可以采用另一种方式:切换到«Release»,然后对其进行调试。您需要在编译器和链接器首选项的项目属性中启用调试符号信息的生成; MSDN here 会准确地告诉您需要设置哪些选项来调试发布版本。

    【讨论】:

      【解决方案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。我在 pyconfig.h 中注释掉了 #define PY_DEBUG 行。还在第 332 行将 pragma 更改为“pragma comment(lib,"python26.lib")”。瞧!它奏效了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-04-20
          • 1970-01-01
          • 1970-01-01
          • 2014-05-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-01
          相关资源
          最近更新 更多