c++ 在Visual Studio中使用64位编译器

46scxncf  于 2023-05-30  发布在  其他
关注(0)|答案(1)|浏览(324)

我使用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的内存,但我现在找不到它。任何帮助将不胜感激。
编辑:我在调试模式下遇到了限制。在发布模式下编译工作正常。我想这也说得通。

bt1cpqcv

bt1cpqcv1#

默认情况下,Visual Studio使用32位工具链(即编译器是32位的,并且交叉编译64位的可执行文件)。Visual Studio 2015和2017包括所有编译器(x86,x64,arm,arm 64)的32位和64位版本。
您可以通过两种方法选择在64位系统上使用64位工具链:
1.在您的构建机器上添加一个环境变量(系统范围内或从VS Developer命令提示符)。
例如:

set PreferredToolArchitecture=x64
devenv

1.你可以编辑你的vcxproj文件,也可以使用<PreferredToolArchitecture>x64</PreferredToolArchitecture>元素:
例如:

<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 Game VS Templates的UWP(C++/WinRT)版本中使用了第二种方法,我刚刚注意到我应该将它添加到我的UWP(C++/CX)和Win32版本中。Xbox One XDK也会在其平台构建规则中自动做到这一点。
请注意,这个问题在过去已经得到了回答:How to make Visual Studio use the native amd64 toolchain

**更新:**VS 2022为64位原生版本,默认使用64位工具。它还默认使用64位MSBuild,而旧产品默认为32位MSBuild。

相关问题