未找到在 C++ 'python33_d.lib' 中使用 Python 3.3
Posted
技术标签:
【中文标题】未找到在 C++ \'python33_d.lib\' 中使用 Python 3.3【英文标题】:Using Python 3.3 in C++ 'python33_d.lib' not found未找到在 C++ 'python33_d.lib' 中使用 Python 3.3 【发布时间】:2013-06-10 16:26:27 【问题描述】:我试图在我的 C++ 代码中使用 #include <Python.h>
,当我去编译我的代码时,我得到了这个错误:
fatal error LNK1104: cannot open file 'python33_d.lib'
我试图在我的计算机上找到python33_d.lib
以包含在我的链接器依赖项中,但我找不到它。我已经找到python33.lib
。
我在哪里可以找到python33_d.lib
,或者我该如何解决这个问题?
【问题讨论】:
【参考方案1】:来自python bug tracker的简单解决方案:
#ifdef _DEBUG
#undef _DEBUG
#include <python.h>
#define _DEBUG
#else
#include <python.h>
#endif
【讨论】:
【参考方案2】:如果您需要调试版本(就像我工作一样),可以自己构建库:
-
从http://www.python.org/download下载源压缩包
解压 tarball(7zip 可以解决问题)并进入生成的目录(应该类似于 Python-3.3.2)。
从 Python 目录转到 PCBuild 文件夹。这里有两个重要的文件:readme.txt,其中包含在 Windows 中构建 Python 的说明(即使它使用 UNIX 换行样式...),以及 pcbuild.sln,它是构建 Python 的 Visual Studio 解决方案。
在 Visual Studio 中打开 pcbuild.sln。 (我假设您使用的是 Visual Studio 10;readme.txt 包含针对旧版 Visual Studio 的具体说明。)
确保将 Visual Studio 设置为“调试”配置,然后为您的适当架构(x64 或 Win32)构建解决方案。您可能会遇到一些失败的子项目,但并非所有这些子项目都是构建 python33_d 所必需的;据我统计,有 8 个构建失败,但我还是得到了一个可以工作的 .lib 文件。
您会在 PCBuild 文件夹(如果构建 Win32)或 amd64 子文件夹(如果构建 x64)中找到 python33_d.lib 和 python33_d.dll。
【讨论】:
我从这条路径开始,然后在运行命令build.bat -d
后出现错误,提示我需要安装特定版本的 Visual Studio (v2015),但我不想这样做。所以,我选择了@aquirdturtle 解决方案,它允许我通过添加调试库来修改我当前的安装。现在,我不再收到 OP 所述的错误。【参考方案3】:
*_d.lib
用于调试构建。改用发布版本。
【讨论】:
现在运行时找不到python33.dll。我将它添加到我的项目中,是否需要将 python33.dll 的路径添加到我的属性中? 将该 DLL 放在加载程序希望找到的位置,例如当前目录。 好的,所以我将Python33.dll
复制粘贴到当前目录中,现在我收到访问冲突错误 Unhandled exception at 0x000000001E17D5CD (python33.dll) in PythTest.exe: 0xC0000005: Access violation reading location 0x0000000000000008.
这不是正确的解决方案...这只是为了避免当前的构建错误。【参考方案4】:
如果您通过 python.org 上的安装程序安装 python,您可以通过在安装时选择“自定义安装”来告诉安装程序包含调试符号和二进制文件,例如 pythonXX_d.dll 文件(我认为这是第二次自定义页)。如果您对自己构建项目不是很精通(像我一样),这可能是最简单的解决方案。太糟糕了,我看不到使用 anaconda 发行版的任何方法。
【讨论】:
请注意,这个选项不在您选择自定义后看到的第一个屏幕上(这让我有点失望)。您必须单击“下一步”按钮,然后您将看到该选项。【参考方案5】:打开 Python 安装程序(.exe) -- 修改 -- 下一步 -- 启用复选框Debug Symbols and Libs
【讨论】:
这应该是公认的答案,重新安装 Python 需要 1 分钟,包括所有调试符号。 是的。这应该被接受为答案。它无需任何调整即可工作。【参考方案6】:如果您使用 Swig 生成 python 包装器,那么您可以定义宏 SWIG_PYTHON_INTERPRETER_NO_DEBUG。在这种情况下,它不会寻找 python**_d.lib
【讨论】:
以上是关于未找到在 C++ 'python33_d.lib' 中使用 Python 3.3的主要内容,如果未能解决你的问题,请参考以下文章
LNK1104 无法打开文件'python39_d.lib'
无法打开文件“C:Python27libs.obj”,无法打开文件“python27_d.lib”
无法打开文件“C:Python27libs.obj”,无法打开文件“python27_d.lib”