相关疑难解决方法(0)

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

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

细节:

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

我们已禁用病毒扫描程序.使用procmon.exe观察并且在链接器失败时没有看到与PDB的交互.

相关问题表明PDB的约1 GB限制 - 任何人/方式确认这一点?

更新和解决方案:

@Barry和铬团队提出了解决方案. 以下是实现解决方案的Chromium构建系统的补丁.

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

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

cl -c "dummy_empty.cpp" /Zi /Fd"$(TargetDir)$(TargetName).pdb" 
Run Code Online (Sandbox Code Playgroud)

原始解决方案
使用空cpp文件创建C++静态库项目,配置'Porgram数据库文件名'以输出除默认值之外的其他内容.使用一些项目构建事件(我使用'Pre-Link Event')将先前创建的PDB复制到链接器期望的任何位置(请参阅链接器 - >生成程序数据库文件)以创建其PDB.幸运的是,链接器将采用在PDB中复制并使用其4 kB页面大小.这将花费一些时间,一些空间允许高达2GB的PDB.

c++ linker visual-studio-2010 visual-c++ pdb-files

16
推荐指数
2
解决办法
2422
查看次数

标签 统计

c++ ×1

linker ×1

pdb-files ×1

visual-c++ ×1

visual-studio-2010 ×1