1.问题描述:
使用Visual Studio 2017创建C++默认工程项目,编译报错,提示 LNK1104: 无法打开文件"MSVCRTD.lib"。
2.问题分析:
对比其他电脑程序环境,项目-属性-属性页-VC++目录:库目录,发现系统宏 $(VC_LibraryPath_x86) 有错误,部分路径不存在。错误路径为:C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\lib\Spectre\x86;... 正确路径为:C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\lib\x86; ... 错误的路径中都多了 "Spectre\"。
.
3.解决方法:
可以手动添加正确路径,或修正系统宏 $(VC_LibraryPath_x86) 设置。着重说明如何修正系统宏,经常繁杂搜索后,确定是 C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.Cpp.Common.props 文件有错误,定位到行 “<VCLibDirMod Condition="'$(VCLibDirMod)' != 'true' and '$(SpectreMitigation)' == 'Spectre'">Spectre\</VCLibDirMod>” ,删去"Spectre\"即可。至于为何会发生如此错误,不得而知。
4.本文目的:
每个人遇到的问题大多数都是特定的,不可能尽相同,本文旨在告诉读者如果遇到此类错误或需要自定义VS系统宏时应如何进行,系统下有数百个 .props 属性设置文件,可使用 Everything、UltraEdit 工具,根据路径、文件名称、目标字符串等特征去搜索。
请注意,大多数宏都是多层嵌套的,甄别时有较大难度,建议修改验证时做好备份。
5.结果:
宏 $(VC_LibraryPath_x86) 内容修正后,编译成功。