.ilk和.iobj文件有什么区别?

时间:2018-06-27 20:01:53

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

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

1 个答案:

答案 0 :(得分:1)

根据this answer,产生了.iobj文件以支持增量的链接时代码生成(又名LTCG,我称之为“整个程序优化” ),而LTCG通常仅用于发布版本。

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

另一方面,

.ilk文件支持用于调试版本的增量 linking 链接,以缩短链接时间。这与增量LTCG不同,在增量LTCG中,链接器尝试利用之前进行的交叉编译单元优化,再次以加快的速度进行优化,但是采用了不同的方式。

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

对于发行版,增量链接通常是关闭的,尽管我不确定为什么。也许这两个选项是互不兼容的,但我从未尝试过一次启用它们。也许MS认为我们已经厌倦了他们使用构建产品使硬盘混乱,谁知道呢?

相关问题