我们已经完成了 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/