在构建和编译 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
工具进行处理。