【问题标题】:What is the difference between .ilk and .iobj files?.ilk 和 .iobj 文件有什么区别?
【发布时间】:2018-12-06 19:23:53
【问题描述】:

我注意到 Visual Studio 为调试版本生成 *.ilk 文件,为发布版本生成 *.iobj 文件。据我了解,这两种文件类型都用作增量链接器的输入。它们之间有什么区别?它们可以一起使用吗?如何在项目设置中禁用这些文件?

【问题讨论】:

    标签: visual-studio visual-c++ linker pdb


    【解决方案1】:

    根据this answer,生成 .iobj 文件以支持增量链接时间代码生成(又名 LTCG,我相信过去被称为“整个程序优化”)和LTCG 通常仅对发布版本启用。

    LTCG 可以执行的一项优化是内联来自另一个编译单元(即源文件)的函数。编译器(当然)不能这样做。毫无疑问还有其他人。

    另一方面,

    .ilk 文件支持用于调试构建的增量链接,以获得更快的链接时间。这与增量 LTCG 不同,在增量 LTCG 中,链接器尝试利用它以前做过的交叉编译单元优化,再次加快速度,但方式不同。

    因此,要禁止生成 .iobj 文件,请为您的项目关闭“增量链接时间代码生成”,要禁止生成 .ilk 文件,请关闭“增量链接”。我相信这两个都是链接器选项。但是为什么要打扰呢? - 他们加快了发展。相反,我会在归档项目的 [一个版本] 时删除这些文件。

    对于发布版本,增量链接通常是关闭的,尽管我不知道为什么。也许这两个选项相互不兼容,我从未尝试过同时启用它们。或者也许 MS 认为我们已经厌倦了他们用构建产品把我们的硬盘弄得乱七八糟,谁知道呢?

    【讨论】:

      猜你喜欢
      • 2012-06-07
      • 2014-01-23
      • 2020-08-19
      • 2011-05-22
      • 2010-10-26
      • 2011-01-26
      • 2010-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多