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

e0uiprwp  于 2023-11-21  发布在  .NET
关注(0)|答案(4)|浏览(425)

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

  1. 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,但我不知道我们使用了任何可执行代码,托管代码,/LN或/NOASSEMBLY。

kxe2p93d

kxe2p93d1#

我也有同样的问题,所以我做了一些研究。
根据https://msdn.microsoft.com/en-us/library/0zza0de8.aspx
如果使用/GL和/c编译程序,则应使用/LTCG链接器选项来创建输出文件。
所以这个消息可能有点误导-问题不在于MSIL .netmodule,而在于用/GL编译的模块
当使用/GL时,你告诉编译器延迟一些代码的生成,即围绕函数边界,以优化它们。LTCG指示链接器生成(和优化)缺失的代码。否则,程序将无法按预期运行。
基本上,这两个开关应该一起使用(当使用时)。它们适用于构建的不同部分:一个用于编译,另一个用于链接。
完整性:

  • /GL通过配置属性> C/C++ >优化>整个程序优化进行控制
  • /LTCG通过配置属性>链接器>优化>整个程序优化进行控制

在后来的版本中,

  • /LTCG通过配置属性>链接器>优化>链接时间代码生成/使用链接时间代码生成(/LTCG)进行控制
axkjgtzd

axkjgtzd2#

我遇到了同样的错误,花了很多时间试图修复它。最后,我发现它是由于在我的一个依赖库中使用了“整个程序优化”选项而出现的。
默认情况下,在新创建的项目中,此选项设置为“是”。当我将其更改为“否”并重新编译所有依赖项时,警告消失了。我有纯原生C解决方案,没有任何托管代码。
若要修复,请打开所有依赖项项目的项目设置并检查设置:
配置属性> C/C
>优化>整个程序优化
确保它在所有地方都设置为“否”。

qpgpyjmq

qpgpyjmq3#

我发现同样的错误通过告诉链接器你使用的/GL设置而消失了:
将...配置属性/链接器/优化/链接时代码生成设置为...非默认设置之一
https://msdn.microsoft.com/en-us/library/xbf3tbeh.aspx可能有用?
尼尔

xdyibdwo

xdyibdwo4#

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

相关问题