在 Visual Studio 2017 中使用 64 位 Visual C++ 工具集

Posted

技术标签:

【中文标题】在 Visual Studio 2017 中使用 64 位 Visual C++ 工具集【英文标题】:Use the 64-bit Visual C++ Toolset in Visual Studio 2017 【发布时间】:2017-09-05 13:30:36 【问题描述】:

我的(相当大的)C++ 项目已经发展到在尝试编译我的项目时出现C1060: compiler is out of heap space 错误的地步。

我在 64 位 Windows 10 机器上编译,但似乎 Visual Studio 正在使用 32 位工具集编译我的项目(见下面的屏幕截图)。

C1060 help page 要求我使用 64 位工具集,但提供的链接讨论了如何在仅使用命令行编译时启用它。

有没有办法在 Visual Studio 2017 中设置项目属性或其他内容,以告诉它使用 64 位编译器工具集(已安装在我的机器上)?

【问题讨论】:

编译器 超过 3 GB 的地址空间在我看来是病态代码库的症状......你的项目有多大并不重要,如果你把它模块化,每个翻译单元都应该是可管理的。 @MatteoItalia 我同意,大部分代码都在一个带有大量模板和标题的翻译单元中,而且有点混乱。但是现在,我没有时间重构代码库。 出于某种奇怪的原因,当我定义了template <typename TBoolConstant> using constant_not = std::bool_constant<!(TBoolConstant::value)>; 时,当我有一个constant_not<std::true_type> 时,编译器变得非常耗内存。如果我将定义更改为template <typename TBoolConstant> using constant_not = std::bool_constant<!bool(TBoolConstant::value)>;,内存将降至非常易于管理的 300MB。可能是编译器错误,但我将不得不做更多测试。 【参考方案1】:

这就是我让 Visual Studio 2017 使用 x64 工具集的方式,根据 this 答案:

用你喜欢的文本编辑器打开 .vcxproj 文件,找到这一行:

<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

然后在其后立即添加:

<PropertyGroup>
  <PreferredToolArchitecture>x64</PreferredToolArchitecture>
</PropertyGroup>

该答案适用于 Visual Studio 2013,但也适用于 2017 年。

补充说明:然而,事实证明这并没有真正解决我的问题。 64 位工具集占用了我机器上的所有内存并迫使我需要重新启动。当我回滚对代码的最新更改时,它使用 ~2.8GB 编译 32 位编译器,使用 ~4.2GB 编译 64 位编译器(在冻结我的任务管理器之前,最新代码消耗了 ~6.4GB我的 8GB 机器)。我将查看新代码并试图找出为什么需要这么多内存。

【讨论】:

以上是关于在 Visual Studio 2017 中使用 64 位 Visual C++ 工具集的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Visual Studio 2013或Visual Studio 2017设置TFS 2013

在 Visual Studio 2017 中使用 64 位 Visual C++ 工具集

如何在 Visual Studio 2017 中使用 Qt 库?

在 Visual Studio 2017 中使用 CUDA

Visual Studio 2017工程在Visual Studio 2019打开碰到的问题

Visual Studio 2017工程在Visual Studio 2019打开碰到的问题