我们已经查看了MSDN上关于此错误的列表(除了#5)。三个不同的人在不同的机器上遇到了相同的问题。PDB文件被创建了,但是在中途失败了。
细节如下:
细节如下:
- 67个静态库
- 4.27 GB的静态库
- 链接器失败时PDB大小为1048575字节
- PDB的最后几兆是空的(全是零)
- 发布版本构建成功并生成了PDB(我们已经开启了它,但是在exe中没有调试信息)
- 发布版本的PDB大小略小于1 GB。
@Barry和Chromium团队想出了解决方案。 这里 是实现该解决方案的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++ 静态库项目,将“程序数据库文件名称”配置为输出其他内容而不是默认值。使用一些项目构建事件(我使用了“预链接事件”)将之前创建的 PDB 复制到连接器期望的任何位置(请参见连接器->生成程序数据库文件),以创建其 PDB。幸运的是,连接器将采用复制的 PDB 并使用其 4KB 页面大小。这将节省一些时间和空间,允许最多2GB的PDB。