我的解决方案中的一些项目会产生以下链接器警告:
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。
4条答案
按热度按时间kxe2p93d1#
我也有同样的问题,所以我做了一些研究。
根据https://msdn.microsoft.com/en-us/library/0zza0de8.aspx:
如果使用/GL和/c编译程序,则应使用/LTCG链接器选项来创建输出文件。
所以这个消息可能有点误导-问题不在于
MSIL .netmodule
,而在于用/GL
编译的模块当使用
/GL
时,你告诉编译器延迟一些代码的生成,即围绕函数边界,以优化它们。LTCG
指示链接器生成(和优化)缺失的代码。否则,程序将无法按预期运行。基本上,这两个开关应该一起使用(当使用时)。它们适用于构建的不同部分:一个用于编译,另一个用于链接。
完整性:
/GL
通过配置属性> C/C++ >优化>整个程序优化进行控制/LTCG
通过配置属性>链接器>优化>整个程序优化进行控制在后来的版本中,
/LTCG
通过配置属性>链接器>优化>链接时间代码生成/使用链接时间代码生成(/LTCG)进行控制axkjgtzd2#
我遇到了同样的错误,花了很多时间试图修复它。最后,我发现它是由于在我的一个依赖库中使用了“整个程序优化”选项而出现的。
默认情况下,在新创建的项目中,此选项设置为“是”。当我将其更改为“否”并重新编译所有依赖项时,警告消失了。我有纯原生C解决方案,没有任何托管代码。
若要修复,请打开所有依赖项项目的项目设置并检查设置:
配置属性> C/C >优化>整个程序优化
确保它在所有地方都设置为“否”。
qpgpyjmq3#
我发现同样的错误通过告诉链接器你使用的/GL设置而消失了:
将...配置属性/链接器/优化/链接时代码生成设置为...非默认设置之一
https://msdn.microsoft.com/en-us/library/xbf3tbeh.aspx可能有用?
尼尔
xdyibdwo4#
这个消息显示了很多,这真的引起了怀疑。我使用了一个属性表,它告诉/GL和/LTCG。该项目没有使用任何外部库。我得到了这个消息,这没有任何意义。它消失了,如果我去项目属性,并指定“使用链接时间代码生成”再次从那里。它不改变命令行或任何东西,但只是让VC高兴...