Qt MSVC 编译器报错 C1060

Qt MSVC 编译器报错 C1060

文章目录

关键字: Qt、 MSVC、 C1060、 编译、 内存

摘要

最近一直在看别人的代码,本来就云里雾里,还遇到的编译器每次编译都会报C1060 错误,开始一直以为是机器的物理内存不够了,但是监控内存发现最高也就到70%。所以还是得想法解决一下。

关于C1060出现的原因

C1060 本质编译器堆内存不足,准确的说就是cl.exe程序超内存了。以下是常见的原因:

  1. 源文件过于复杂 :
    • 某个单一的源文件可能包含过多的代码、模板或者复杂的宏定义,导致编译器需要大量内存来处理。
  2. 大量嵌套模板 :
    • 如果在代码中使用了大量的模板(比如 STL 或自定义模板),特别是深度嵌套的模板实例化,会消耗大量内存。
  3. 代码生成问题 :
    • 可能存在一些特殊代码模式,导致编译器生成了过多的中间代码,消耗了编译器堆内存。
  4. 编译环境问题 :
    • 主机系统的内存不足,或者编译器分配给内部堆的限制不足。

解法1

有一种说法说默认编译器为是32为的,最大支持4G内存,可以通过修改.vcxproj,使用64位的cl.exe程序即可。在 .vcxproj中 搜索"Globals",可找到 <PropertyGroup Label="Globals" 这一行;在这个标签的末尾增加一行:x64 如下图所示:

解法2

另一种说法是在Pro项目文件中包含了大量的资源,要在Pro中开启大资源文件支持代码如下

qmake 复制代码
CONFIG += resources_big

解法3

这个是我用的 Qmake

  1. 启用多核编译: QMAKE_CXXFLAGS += /MP 这个默认就是
  2. 调整编译器内存分配比例:QMAKE_CXXFLAGS += /Zm400
  3. 关闭优化: QMAKE_CXXFLAGS_DEBUG += /Od

那么CMake 语法如下:

cmake 复制代码
if (MSVC)
  \# 启用多核编译
  add_compile_options(/MP)
  \# 调整内存分配比例
  add_compile_options(/Zm200)
  \# 关闭优化(Debug 模式)
  add_compile_options($<$<CONFIG:Debug>:/Od>)
endif()

其他

这里建议遇到类似问题,还是要关闭无关程序,也可以尝试增加虚拟内存以及使用64位工具链。


相关推荐
把我格子衫拿来14 小时前
VTK 9.5 与 Qt 6 联合开发:从嵌入三维窗口到可维护的桌面架构
c++·python·qt·vtk·三维可视化
把我格子衫拿来20 小时前
VTK 与 Qt 的 CMake 工程怎么组织?模块、工具链与二进制兼容排错
c++·qt·vtk·cmake·工程实践
代钦塔拉1 天前
【C++/Qt 进阶】设计模式系列(4):原型模式——用“克隆“代替“重新构造“
c++·qt·设计模式
Python图像识别1 天前
56-【2027毕设】YOLO11X光安检危险物品检测系统 - Python完整源码+PyQt5界面+训练模型+数据集
python·qt·课程设计
把我格子衫拿来1 天前
鼠标点到哪里才算选中?Qt 与 VTK 的拾取坐标、DPI 与体素定位
python·qt·vtk·坐标变换·三维交互
Lhan.zzZ2 天前
Qt WebEngineView 在 Linux 上无法加载网页:从“看不见 HTML“到“禁用沙箱“
linux·c++·qt
Quz2 天前
QML TabBar 标签栏交互效果合集
qt·动画·qml
数据库小学妹2 天前
MySQL内存占用过高怎么排查?分层定位与OOM根因
数据库·经验分享·mysql·内存·oom
zhanghaha13142 天前
Qt 工程实例:逐词逐句保姆级讲解
qt
架构师伯子明3 天前
QT+OpenGL(3):FBO离屏渲染
开发语言·qt