vs2022 编译遇见编译器堆空间不足,解决办法(针对CMAKE工程)

1、原因:

就是编译工程文件太大,导致堆栈溢出。原始vs默认的编译器是32位,我们设置为64位就可解决部分问题。

具体可能造成的原因可以参考:

错误 C1060 |微软学习 (microsoft.com)

2、解决:

1、需要提前安装cmake,不然在命令没法通过指令运行

2、在命令行,跳到对应的工程文件,如图

3、输入指令:

cmake -G "Visual Studio 17 2022" -A x64 -T host=x64

 vs版本对应

Visual Studio 17 2022        = Generates Visual Studio 2022 project files.
                                 Use -A option to specify architecture.
  Visual Studio 16 2019        = Generates Visual Studio 2019 project files.
                                 Use -A option to specify architecture.
  Visual Studio 15 2017 [arch] = Generates Visual Studio 2017 project files.
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files.
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 12 2013 [arch] = Generates Visual Studio 2013 project files.
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 11 2012 [arch] = Generates Visual Studio 2012 project files.
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 10 2010 [arch] = Deprecated.  Generates Visual Studio 2010
                                 project files.  Optional [arch] can be
                                 "Win64" or "IA64".
  Visual Studio 9 2008 [arch]  = Generates Visual Studio 2008 project files.
                                 Optional [arch] can be "Win64" or "IA64".

 

4、然后cmake文件会变成如下文件:

 5、修改最外层的ZERO_CHECK.vcxproj

      5.1 找到PropertyGroup Label="Globals"

      5.2 在最后添加<PreferredToolArchitecture>x64</PreferredToolArchitecture>

 6、重新生成,编译即可。

      先点击全部清理,再点击全部生成。

 7、补充:

如果还是报错,可以参考如下报错原因:

如果编译器还发出错误C1076和C3859,请使用 /Zm编译器选项降低内存分配限制。如果降低剩余内存分配,则应用程序可以使用更多堆空间。

如果已经设置了 /Zm选项,请尝试将其删除。堆空间可能已耗尽,因为选项中指定的内存分配限制太高。如果删除 /Zm选项,编译器将使用默认限制。

如果在 64 位平台上进行编译,请使用 64 位编译器工具集。有关信息,请参见如何:在命令行上启用 64 位可视C++工具集。

在 32 位 Windows 上,尝试使用 /3GBboot.ini 开关。

增加 Windows 交换文件的大小。

关闭其他正在运行的程序。

消除不必要的包含文件。

消除不必要的全局变量,例如,通过动态分配内存而不是声明大型数组。

消除未使用的声明。

将当前文件拆分为较小的文件

猜你喜欢

转载自blog.csdn.net/qq_40214464/article/details/127979134