在MSVC上编译定义了DEBUG的Python模块
Python 有一个比较奇怪的设置,在它的包含文件中有一个指令,要求在定义了 DEBUG
这个预处理变量的时候,链接一个叫 python26_d.lib
的文件。这个问题在于,Python 的安装包里根本没有这个 python26_d.lib
!所以我无法在 MSVC 中以调试模式构建应用程序。如果我临时在某个文件里使用 #undef DEBUG
,就会收到很多关于 DLL 链接不一致的错误。如果我修改 Python 的包含文件中的指令,就会出现找不到各种调试函数的错误。
我尝试自己编译一个版本的 Python,但这个版本和官方发布的 Python 有些不同,导致我无法将我的模块与官方版本的应用程序一起使用。
有没有人能给我一些建议,帮我解决这个问题?
5 个回答
4
你也可以反过来操作:切换到“发布”模式,然后进行调试。你需要在项目属性里,找到编译器和链接器的设置,开启生成调试符号的信息。MSDN 这里会告诉你具体需要设置哪些选项才能调试发布版本。
8
在你把第332行的"#define Py_DEBUG"注释掉之后,修改
# ifdef _DEBUG
# pragma comment(lib,"python26_d.lib")
# else
为
# ifdef _DEBUG
# pragma comment(lib,"python26.lib")
# else
之后,你就不需要再用python26_d.lib这个文件了。
21
来自 python list
作为解决这个问题的一个方法,你可以尝试把文件 python26.dll 复制一份,命名为 python26_d.dll。虽然我不确定这样做是否有效;你提到你是在调试模式下构建 SWIG 库,而 SWIG 可能会尝试使用 Python 调试版本的一些功能。如果真是这样,那你就只能使用 Python 的调试版本了。
补充:根据评论:
你还应该编辑 pyconfig.h 文件,把 "#define Py_DEBUG" 这一行(第374行)注释掉。