在Visual Studio中使用64位编译器

Use 64-bit compiler in Visual Studio

本文关键字:64位 编译器 Visual Studio      更新时间:2023-10-16

我使用Visual Studio 2017。在一个项目(我的目标是x64)中,我得到了error : C1060, compiler is out of heap space,不幸的是,我了解到编译时恰好存在内存限制。

当监视CL.exe时,它确实在达到4GB之前停止。因此,看起来CL.exe默认情况下是一个32位的应用程序,如https://learn.microsoft.com/en-us/cpp/build/how-to-enable-a-64-bit-visual-cpp-toolset-on-the-command-line

看完这个页面后,我安装了";通用Windows平台工作负载";希望能访问64位版本的CL.exe。但在编译我的项目时没有任何变化,我在visual studio中看不到任何选择编译器版本的选项。

我认为必须有一个变通方法,才能为单个编译单元使用超过4GB的空间,但我现在找不到它。任何帮助都将不胜感激。

编辑:我在调试模式下达到了限制。编译在发布模式下运行良好。这是有道理的。

默认情况下,Visual Studio使用32位工具链(即编译器为32位,并交叉编译64位可执行文件)。Visual Studio 2015和2017包含所有编译器(x86、x64、arm、arm64)的32位和64位版本。

您可以通过两种方法选择在64位系统上使用64位工具链:

  1. 在构建机器上添加环境变量(可以是系统范围的,也可以是VS Developer命令提示符下的)

例如:

set PreferredToolArchitecture=x64
devenv
  1. 您可以使用<PreferredToolArchitecture>x64</PreferredToolArchitecture>元素编辑vcxproj文件以执行此操作:

例如:

<Import Project="$(VCTargetsPath)Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>

我在Direct3D游戏VS模板的UWP(C++/WinRT)版本中使用了第二种方法,我刚刚注意到我应该将其添加到UWP(C++/CX)和Win32版本中。Xbox One XDK在其平台构建规则中也会自动做到这一点。

注意,这个问题在过去已经得到了回答:如何让Visual Studio使用本机amd64工具链

更新:VS 2022是64位本机,因此默认使用64位工具。它还默认使用64位MSBuild,而旧产品默认使用32位MSBuild。