Zac*_*Zac 16 c++ linker visual-studio-2010 visual-c++ pdb-files
我们已经在MSDN WRT上列出了这个错误(#5除外).不同机器上的三个不同的人正在遇到同样的问题.PDB已创建,但在中间某处失败.
细节:
我们已禁用病毒扫描程序.使用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.
我把一个带有1000个cpp文件的测试程序放在一起,每个cpp有一个函数,它实例化了500个独特的模板类型.
到达PDB文件时Link.exe失败:1048575 KB.
在PDB格式或LINK.exe中似乎是1 GB的某种硬限制.
| 归档时间: |
|
| 查看次数: |
2422 次 |
| 最近记录: |