gpt4 book ai didi

c++ - LNK1201 Visual C++ 2010 大型项目无法生成 PDB

转载 作者:IT老高 更新时间:2023-10-28 22:21:30 28 4
gpt4 key购买 nike

我们已经完成了 MSDN 中列出的要点WRT 对此错误(#5 除外)。不同机器上的三个不同的人遇到了同样的问题。 PDB 已创建,但在中间某处失败。

详情:

  • 67 个静态库
  • 4.27 GB 的静态库
  • 1048575 字节 - 链接器失败时 PDB 的大小
  • PDB 的最后几兆字节为空(零)
  • 发布构建成功并生成一个 PDB(我们已打开它,exe 中没有调试信息)
  • 发布版本 PDB 不到 1 GB。

我们已禁用病毒扫描程序。用 procmon.exe 观察,当链接器失败时,没有发现与 PDB 的可疑交互。

Related question建议对 PDB 进行约 1 GB 的限制 - 任何人/方式来确认?

更新和解决方案:

@Barry 和 Chromium 团队提出了解决方案。 Here是实现分辨率的 Chromium 构建系统的补丁。

详情
PDB 在内部使用虚拟文件系统:MSF .当链接器创建 PDB 文件时,它默认为(显然不可配置)2 kB 页面大小。显然并且幸运的是,当编译器创建它的 PDB 时,它会将页面大小默认为 4 kB。这个编译器 PDB 可以被提升并用作链接器 PDB 的基础。

更好的解决方案作为链接您的 exe 或 dll 的项目的预链接事件,我们可以提升编译器以生成我们所需的初始 PDB:

cl -c "dummy_empty.cpp" /Zi /Fd"$(TargetDir)$(TargetName).pdb" 

原始解决方案
使用空的 cpp 文件创建 C++ 静态库项目,配置“Porgram 数据库文件名”以输出默认值以外的内容。使用一些项目构建事件(我使用“预链接事件”)将先前创建的 PDB 复制到链接器期望的任何位置(请参阅 Linker->Generate Program Database File )以创建其 PDB。幸运的是,链接器将采用 PDB 中的复制并使用其 4 kB 页面大小。这将花费一些时间和一些空间,最多允许 2GB PDB。

最佳答案

pdb 大小确实有 1GB 的最大限制。有一些技巧可以将其扩展到 2GB(更多信息可以在 Here 中找到)。基本上你必须自己生成初始 pdb 文件,而不是编译器。

您可以做的其他事情是对您的模板代码进行一些主动提升,因为这也可能会影响您的 pdb 大小。

关于c++ - LNK1201 Visual C++ 2010 大型项目无法生成 PDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16308861/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com