当前位置: 首页 > news >正文

【Qt】构建和编译 Qt 程序时如何减少生成的二进制可执行文件的大小

在构建和编译 Qt 程序时,可以通过以下几种方式减少生成的二进制可执行文件的大小:

1. 使用 -s 参数去除符号信息

在链接阶段添加 -s 参数可以去除可执行文件中的符号表和调试信息:

bash

g++ -s -o myapp main.o mainwindow.o ... -lQtGui -lQtCore ...

或者,在 .pro 文件中添加:

qmake

QMAKE_LFLAGS += -s

2. 启用优化选项

启用编译器优化以减少代码体积并提升性能:

qmake

QMAKE_CXXFLAGS_RELEASE += -O3

或使用更激进的优化级别,如 -Os(优化大小):

qmake

QMAKE_CXXFLAGS_RELEASE += -Os

3. 静态库与动态库的选择

  • 使用动态库:避免将 Qt 库静态链接到程序中,这会显著增加可执行文件的大小。确保 .pro 文件中没有 QT += static
  • 移除不必要的模块:只包含所需的 Qt 模块,例如:

    qmake

    QT += core gui widgets

4. 剥离调试信息(Strip Debug Symbols)

在编译完成后,可以使用 strip 工具进一步去除可执行文件中的调试信息:

bash

strip --strip-all ecg_sample

也可以使用 --strip-debug 只去除调试符号。

5. 使用 UPX 压缩可执行文件(谨慎使用)

UPX 是一个可执行文件压缩工具,可以减小文件体积:

bash

upx --best ecg_sample

⚠️ 注意:某些嵌入式设备可能不支持运行经过 UPX 压缩的程序。

6. 移除未使用的资源和图片

检查项目中是否包含不必要的资源文件(.qrc),并删除未使用的图片、翻译文件等。

7. 调整 Qt 构建配置

如果你是自定义编译 Qt 库,请确保启用了合适的配置参数来减小体积,例如:

bash

./configure -release -strip -optimize-size ...

示例修改后的 .pro 片段

qmake

QT += core gui widgets TARGET = ecg_sample TEMPLATE = app SOURCES += main.cpp\ mainwindow.cpp QMAKE_CXXFLAGS_RELEASE += -Os QMAKE_LFLAGS += -s

总结

通过上述方法,你可以有效减小 Qt 程序的可执行文件大小,从而解决 No space left on device 的问题。建议优先尝试 -s 和 -Os 编译选项,并结合 strip 工具进行处理。

http://www.lryc.cn/news/590246.html

相关文章:

  • Navicat操作指南:MySQL数据库配置与Todo应用部署
  • MySQL 配置性能优化赛:用创意配置解锁性能潜能
  • 《Java语言程序设计》1.2.4复习题
  • 海盗王如何拍摄和打包小地图
  • 深度赋能推客,让 “业余选手” 变 “带货高手”​
  • Xsens人形机器人拟人动作AI训练,提升机器人工作精度与效率
  • HertzBeat 监控 SpringBoot 使用案例
  • 基于dcmtk的dicom工具 第二章 图像接受StoreSCP(1)
  • windows内核研究(进程与线程-等待链表和调度链表和线程切换)
  • 非控制器(如 Service、工具类)中便捷地获取当前 HTTP 请求的上下文信息
  • 16路串口光纤通信FPGA项目实现指南
  • 数据结构-1(顺序表)
  • 关于 OpenAI 的反思
  • GESP2025年6月认证C++四级( 第三部分编程题(2)排序)
  • 多态,内部类(匿名内部类),常用API(1)
  • HTTP vs HTTPS
  • 【React Native】布局文件-顶部导航栏
  • 从零开始学习 Redux:React Native 项目中的状态管理
  • 3D TOF 安全防护传感器
  • Ubuntu 上 GBase 8s 实例重启与字符集踩坑实录
  • 在UE中如何给骨骼网格体赋予动画
  • conda activate 时报错: CondaError: Run ‘conda init‘ before ‘conda activate‘
  • React Native 在 Web 前端跨平台开发中的优势与实践
  • Django ORM 查询工具对象详解
  • 基于WebRTC技术实现一个在线课堂系统
  • 线上分享:解码eVTOL安全基因,构建安全飞行生态
  • 主机安全---开源wazuh安装
  • 前端面试题(React 与 Vue)
  • Elasticsearch+Logstash+Filebeat+Kibana部署
  • [时序数据库-iotdb]时序数据库iotdb的安装部署