在Visual Studio中使用64位编译器
Use 64-bit compiler in Visual Studio
我使用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位工具链:
- 在构建机器上添加环境变量(可以是系统范围的,也可以是VS Developer命令提示符下的)
例如:
set PreferredToolArchitecture=x64
devenv
- 您可以使用
<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。
- 将应用程序从32位移植到64位时出现问题
- 64位机器上的C++内存对齐
- 我把我的编译器从32位转换为64位,但我仍然不能使用超过2GB:(为什么
- Qt Creator在linux mint 64位中找不到CMAKE_CXX_COMPILER编译器
- 64 位整数和更早的 C++ 编译器
- 在Visual Studio中使用64位编译器
- ASIO编译器错误(Win7 64位 VC11)
- 编译器警告(CodeBlocks/wxwidget):您的编译器似乎不支持64位整数,而是使用仿真类
- 在使用 Visual Studio 2013 64 位编译器编译的 CMake 项目中使用 ttmath
- 编译器或 CPU 中的 64 位溢出错误
- 为什么我的编译器在 64 位计算机上运行时使用 8 位字符?
- 在64位平台上使用交叉编译器生成错误32位.exe
- 使用 Oracle OCI.dll 与 Mingw64 64 位编译器
- 如何在 64 位 Ubuntu 系统上安装简单的英特尔 C/C++ 编译器
- Visual Studio命令编译器强制64位编译
- 为什么int在64位编译器上通常是32位
- 如何生成 64 位.dll哪个 gcc 编译器或其他。无法在 AMD 64 位平台上加载 IA 32 位.dll
- 在64位机器上使用8字节作为int数据类型大小的任何C/ c++编译器
- c++编译器用于win8(64位)
- 微软c++编译器太烦人了!是否有一个替代的编译Windows 32/64位