c++ - 如何在 VS2005 中提高大型 C++ 应用程序的链接性能

标签 c++ visual-studio-2005

我们有相当大的 C++ 应用程序,它由 Visual Studio 2005 中的大约 60 个项目组成。目前在 Release 模式下链接需要 7 分钟,我想尝试减少时间。是否有任何改进链接时间的技巧?

大多数项目都编译成静态库,这使得测试更容易,因为每个项目都有一组关联的单元测试。似乎静态库的使用阻止了 VS2005 使用增量链接,因此即使打开了增量链接,它每次都会进行完整链接。

对子项目使用 DLL 会有什么不同吗?我真的不想遍历所有标题并添加宏来导出符号(即使使用脚本),但如果它能减少 7 分钟的链接时间,我肯定会考虑它。

出于某种原因,从命令行使用 nmake 稍微快一些,而在 Linux(使用 GCC)上链接相同的应用程序要快得多。

  • Visual Studio IDE 7 分钟
  • 从命令行使用 nmake 的 Visual C++ - 5 分钟
  • Linux 上的 GCC 34 秒

最佳答案

如果您使用的是 /GL启用全程序优化 (WPO) 或 /LTCG 的标志标志以启用链接时间代码生成,关闭它们将显着缩短链接时间,但会牺牲一些优化。

此外,如果您使用的是 /Z7标记将调试符号放入 .obj 文件中,您的静态库可能很大。使用 /Zi创建单独的 .pdb 文件可能会有所帮助,如果它阻止链接器从磁盘读取所有调试符号。我不确定它是否真的有帮助,因为我没有对其进行基准测试。

关于c++ - 如何在 VS2005 中提高大型 C++ 应用程序的链接性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5963151/

相关文章:

c++ - Eclipse CDT 无法解析 std:array,std::vector 工作正常

c++ - 如何避免涉及全局变量的循环#include?

c++ - 如何修复这些错误 : C2146 & C4430 (in c++)

c# - 从 .Net 中的 SAS 数据源读取数据

.net - 为什么在设计器中为控件的属性指定数值会导致代码中出现 new Decimal(new int[] {... ?

c++ - 视觉 C++ 2005 : How to view the window during a debugging session

visual-studio - 根据配置更改程序集名称 (Visual Studio 2005/2008)

c++ - 更正友元定义以授予 std::map 对私有(private)默认构造函数的访问权限

c++ - C++初学者:为什么我的编译器根据我的循环返回 “name not found”?

asp.net - Visual Studio 2005 中缺少 "Export Template"选项