64位.NET C ++项目使用32位MSBuild / CL.exe进行编译,但无法使用64位MSBuild.exe / CL.exe找到corecrt.h

时间:2017-12-06 22:27:44

标签: c++ visual-studio-2017 cl.exe

我有一个小的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,但我想深究为什么构建工具的位数在这种情况下有所不同。

0 个答案:

没有答案