是什么原因导致链接器警告“MSIL .netmodule或使用/ GL编译的模块;重新启动与/ LTCG的链接”?

时间:2014-10-09 13:10:41

标签: visual-studio visual-studio-2013 linker

我的解决方案中的一些项目会产生此链接器警告:

MSIL .netmodule or module compiled with /GL found; restarting link with /LTCG; add /LTCG to the link command line to improve linker performance

我使用的是Visual Studio 2013 Update 3.我还没有找到可能导致此问题的项目的特定内容。

那些产生这个的项目是什么?


我看过这个:http://msdn.microsoft.com/en-us/library/k669k83h.aspx 但我不知道我们正在使用任何CLR,托管代码,/ LN或/ NOASSEMBLY。

4 个答案:

答案 0 :(得分:31)

我遇到了同样的问题,所以我做了一些研究。

根据https://msdn.microsoft.com/en-us/library/0zza0de8.aspx

  

如果使用/ GL和/ c编译程序,则应使用/ LTCG   链接器选项,用于创建输出文件。

因此消息可能有点误导 - 问题不是MSIL .netmodule,而是使用/GL编译的模块

使用/GL时,告诉编译器延迟生成一些代码,即围绕函数bounderies,以便优化它们。 LTCG指示链接器生成(并优化)丢失的代码。否则,程序将无法按预期运行。

基本上,两个开关应该一起使用(使用时)。它们适用于构建的不同部分:一个用于编译,另一个用于链接。

为了完整性:

  • /GL由配置属性>控制C / C ++>优化>整个计划优化

  • /LTCG由配置属性>控制链接器>优化>整个计划优化

在更高版本中,

  • /LTCG由配置属性>控制链接器>优化>链接时间码生成/使用链接时间码生成(/ LTCG)

答案 1 :(得分:12)

我遇到了同样的错误,花了很多时间来修复它。最后,我发现它是由于在我的一个依赖库中使用“整个程序优化”选项而出现的。

默认情况下,在新创建的项目中,此选项设置为“是”。当我将其更改为“否”并重新编译所有依赖项时,警告消失了。我有纯粹的原生C ++解决方案,没有任何托管代码。

要修复,请打开所有依赖项目的项目设置并检查设置:

配置属性> C / C ++>优化>整个程序优化

确保在任何地方都设置为“否”。

答案 2 :(得分:2)

通过告诉链接器您使用的/ GL设置,我发现同样的错误消失了:

设置......    配置属性/链接器/优化/链接时间代码生成 至 ...    其中一个非默认设置

也许https://msdn.microsoft.com/en-us/library/xbf3tbeh.aspx有用吗?

尼尔

答案 3 :(得分:1)

这条消息显示了很多,这确实引起了怀疑。我使用一个告诉/ GL和/ LTCG的属性表。该项目没有使用任何外部库。我得到了这个消息,这没有任何意义。如果我转到项目属性并指定"使用链接时间代码生成"它会消失。再次从那里。它不会改变命令行或任何东西,但只是让VC开心......