我有一个小的 vcxproj。它只有 64 位,使用 v141 平台工具集,并且使用的是 Windows SDK 8.1,我也尝试使用 Windows SDK 10.0.16299.0 来查看是否有任何区别,但没有。
以前,该项目是使用 32 位 MSBuild 编译的,并且工作正常。最近我尝试使用 64 位 MSBuild 进行编译。对 C++ 编译器的命令行调用是相同的(包括所有包含目录),除了它调用的编译器是
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\CL.exe
代替
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\bin\HostX86\x64\CL.exe"
(更改了 HostX86 -> Hostx64)。这会导致以下错误消息:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\include\crtdefs.h(10, 0): error C1083: Cannot open include file: 'corecrt.h': No such file or directory
我不知道问题可能是什么;它使用相同的包含路径和相同的 Windows SDK。我不明白为什么编译器的位数会影响在目标架构没有改变的情况下是否可以找到头文件!
运行它的机器安装了 Visual Studio 2017 Enterprise、Windows SDK 8.1 和 Windows SDK 10.0.16299.0。
更广泛的背景:这是更新我们的构建依赖项的一部分。我们使用 Invoke-Build 运行构建,从 3.6.3 开始,它开始检测 64 位 MSBuild 安装,并默认使用它们。当然,我可以简单地固定到 32 位 MSBuild,但我想深入了解为什么构建工具的位数在这种情况下会有所不同。