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) 內容修正後,編譯成功。