
Qt MSVC 编译器报错 C1060
文章目录
- Qt MSVC 编译器报错 C1060
- 摘要
- 关于C1060出现的原因
- 解法1
- 解法2
- 解法3
- 其他
关键字:
Qt
、
MSVC
、
C1060
、
编译
、
内存
摘要
最近一直在看别人的代码,本来就云里雾里,还遇到的编译器每次编译都会报C1060 错误,开始一直以为是机器的物理内存不够了,但是监控内存发现最高也就到70%。所以还是得想法解决一下。
关于C1060出现的原因
C1060
本质编译器堆内存不足,准确的说就是cl.exe程序超内存了。以下是常见的原因:
- 源文件过于复杂:
- 某个单一的源文件可能包含过多的代码、模板或者复杂的宏定义,导致编译器需要大量内存来处理。
- 大量嵌套模板:
- 如果在代码中使用了大量的模板(比如 STL 或自定义模板),特别是深度嵌套的模板实例化,会消耗大量内存。
- 代码生成问题:
- 可能存在一些特殊代码模式,导致编译器生成了过多的中间代码,消耗了编译器堆内存。
- 编译环境问题:
- 主机系统的内存不足,或者编译器分配给内部堆的限制不足。
解法1
有一种说法说默认编译器为是32为的,最大支持4G内存,可以通过修改.vcxproj,使用64位的cl.exe程序即可。在 .vcxproj中 搜索"Globals",可找到 <PropertyGroup Label=“Globals” 这一行;在这个标签的末尾增加一行:x64 如下图所示:
解法2
另一种说法是在Pro项目文件中包含了大量的资源,要在Pro中开启大资源文件支持代码如下
CONFIG += resources_big
解法3
这个是我用的 Qmake
- 启用多核编译: QMAKE_CXXFLAGS += /MP 这个默认就是
- 调整编译器内存分配比例:QMAKE_CXXFLAGS += /Zm400
- 关闭优化: QMAKE_CXXFLAGS_DEBUG += /Od
那么CMake 语法如下:
if (MSVC)\# 启用多核编译add_compile_options(/MP)\# 调整内存分配比例add_compile_options(/Zm200)\# 关闭优化(Debug 模式)add_compile_options($<$<CONFIG:Debug>:/Od>)
endif()
其他
这里建议遇到类似问题,还是要关闭无关程序,也可以尝试增加虚拟内存以及使用64位工具链。
