Visual Studio 解决方案中具有相同依赖项的多个项目产生不同的 pdb 大小
Multiple projects in a Visual Studio solution with same dependencies produce different pdb sizes
我有一个包含 170 个项目的 Visual Studio 解决方案。这些项目中的大多数都用作几个主要项目的依赖项。
这些主要项目包括完整版和精简版。让我们说 product_full_link 和 product_lite_link.
这两个项目具有相同的项目依赖关系,只是在配置上略有不同,略微限制了程序之间的可用功能。
当我构建解决方案时,它先构建 product_full_link,然后再构建 product_lite_link。 product_full_link 的 .pdb 文件最终约为 ~1GB。 product_lite_link 的 .pdb 文件在收到错误消息之前达到大约 4GB。
1>LINK : fatal error LNK1201: error writing to program database 'C:\project\Debug\product_lite_link.pdb'; check for insufficient disk space, invalid path, or insufficient privilege
所有 linker 选项在这些项目之间都是相同的。我尝试使用多个 link 选项来减小 .pdb 大小,包括此处描述的所有方法 https://blogs.msdn.microsoft.com/vcblog/2014/03/05/shrink-my-program-database-pdb-file/ 都无济于事。
我还尝试独立于 product_full_link 项目构建 product_lite_link 项目,它仍然会产生巨大的 .pdb 文件并产生相同的错误消息,而 product_full_link 项目始终使用可管理的 .pdb 成功构建。
管理多项目解决方案的任何帮助或参考资料都会有很大帮助。
我找到了问题的解决方案。
问题是项目之间的链接器选项不同。
这些是我 product_full_link.vcxproj
中的链接器选项
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Link>
<AdditionalDependencies>product_full_configuration_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
<HeapReserveSize>0x10000000</HeapReserveSize>
<HeapCommitSize>0x10000</HeapCommitSize>
<LargeAddressAware>true</LargeAddressAware>
<ShowProgress>NotSet</ShowProgress>
<TargetMachine>MachineX64</TargetMachine>
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
<FullProgramDatabaseFile>true</FullProgramDatabaseFile>
</Link>
</ItemDefinitionGroup>
这些是我 product_lite_link.vcxproj
中的链接器选项
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Link>
<AdditionalDependencies>product_full_configuration_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
<TargetMachine>MachineX64</TargetMachine>
</Link>
</ItemDefinitionGroup>
问题是 Visual Studio > Project Properties > Linker 中的选项显示的选项与 .vcxproj 文件中的选项不同,所以我无法找出那里的差异。
虽然我不确定,这些选项中的哪一个是减少 .pdb 文件大小的原因。
我有一个包含 170 个项目的 Visual Studio 解决方案。这些项目中的大多数都用作几个主要项目的依赖项。
这些主要项目包括完整版和精简版。让我们说 product_full_link 和 product_lite_link.
这两个项目具有相同的项目依赖关系,只是在配置上略有不同,略微限制了程序之间的可用功能。
当我构建解决方案时,它先构建 product_full_link,然后再构建 product_lite_link。 product_full_link 的 .pdb 文件最终约为 ~1GB。 product_lite_link 的 .pdb 文件在收到错误消息之前达到大约 4GB。
1>LINK : fatal error LNK1201: error writing to program database 'C:\project\Debug\product_lite_link.pdb'; check for insufficient disk space, invalid path, or insufficient privilege
所有 linker 选项在这些项目之间都是相同的。我尝试使用多个 link 选项来减小 .pdb 大小,包括此处描述的所有方法 https://blogs.msdn.microsoft.com/vcblog/2014/03/05/shrink-my-program-database-pdb-file/ 都无济于事。
我还尝试独立于 product_full_link 项目构建 product_lite_link 项目,它仍然会产生巨大的 .pdb 文件并产生相同的错误消息,而 product_full_link 项目始终使用可管理的 .pdb 成功构建。
管理多项目解决方案的任何帮助或参考资料都会有很大帮助。
我找到了问题的解决方案。
问题是项目之间的链接器选项不同。
这些是我 product_full_link.vcxproj
中的链接器选项<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Link>
<AdditionalDependencies>product_full_configuration_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
<HeapReserveSize>0x10000000</HeapReserveSize>
<HeapCommitSize>0x10000</HeapCommitSize>
<LargeAddressAware>true</LargeAddressAware>
<ShowProgress>NotSet</ShowProgress>
<TargetMachine>MachineX64</TargetMachine>
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
<FullProgramDatabaseFile>true</FullProgramDatabaseFile>
</Link>
</ItemDefinitionGroup>
这些是我 product_lite_link.vcxproj
中的链接器选项<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Link>
<AdditionalDependencies>product_full_configuration_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
<TargetMachine>MachineX64</TargetMachine>
</Link>
</ItemDefinitionGroup>
问题是 Visual Studio > Project Properties > Linker 中的选项显示的选项与 .vcxproj 文件中的选项不同,所以我无法找出那里的差异。
虽然我不确定,这些选项中的哪一个是减少 .pdb 文件大小的原因。