鉴于我们的重点是改进工具集的构建时间作为VisualStudio 14预览的一部分,我们将改变VisualC++调试和发布配置的一些默认值。这些变化包括 /Zc:内联 (删除未引用的COMDAT)调试和发布配置的默认值。 /Zc:内联 作为 Visual Studio 2013更新2 并提供了显著的加速(两位数(%)的链接吞吐量改进,用于非调试(/Od)构建)以及大幅减少编译的静态库的大小。但是 /Zc:内联 指定时,编译器要求使用内联数据或内联函数的转换单元还必须包含数据或函数的定义。
这可能导致不符合代码的中断更改(用C++ 11标准)。启用此功能可能意味着在某些情况下,您会看到未解决的外部符号错误,如下所示,但解决方法非常简单:
如果您使用的是VS2013 RTM,那么这个示例程序将编译(cl/O2 x.cpp xfunc.cpp)并成功链接。但是,如果编译并链接VS2013 Update 2 CTP2及更高版本并启用/Zc:inline(cl/O2/Zc:inline x.cpp xfunc.cpp),则示例将阻塞并生成以下错误消息:
xfunc.obj:错误LNK2019:未解析的外部符号“public:voidu thiscall x::xfunc1(void)” (?xfunc1@x@@QAEXXZ)在函数u main中引用
x、 exe:致命错误LNK1120:1个未解析的外部
有 两种推荐方法 来解决这个问题。
-
从函数“xfunc”的声明中删除“inline”关键字。
-
将函数“xfunc”的定义移到头文件“x.h”中。
我们希望你们能在最新的CTP中尝试这个功能(找到 在这里 )并帮助我们评估影响,希望通过在VS2014中默认启用此功能,此功能将产生积极的影响。
谢谢!