Qt:如何让我的exe"重量"更轻
Qt: How can I make my exe 'weight' less
我正在Fedora上制作一个用Qt 4.8.5制作的程序(让我们称之为ProgramWP),该程序基于QWizard结构及其QWizardPages。该程序大约有50个类,其中30个是QWizardPages。
问题是,程序可执行文件"weights"(不知道英文单词/表达式)8Mb(发布版本),我想知道:
- 为什么它这么重?原因是什么
- 我该如何减少
我需要减少它,因为在企业的产品中,有一些应用程序正在运行,其中一些是我的。要支持exe:
- ProgramMAIN(1.5MiB):企业的主程序
- ProgramMAIN2(600KiB):企业的另一个重要程序
- ProgramWP(8MiB):我的主程序(用Qt制作)
- ProgramMINI(2.5Mib):我的主程序的迷你版(用Qt制作)
- 程序3(1.3MiB):我用Qt制作的另一个程序
正如你所看到的,我的主程序比主程序权重大得多,而主程序则大得多(ProgramWP只是一个配置一些简单事物的小程序)。
我在ProgramWP和ProgramMINI中静态链接我们的一些库,但programMAIn和ProgramMAIN2也是如此,所以……知道ProgramMAIN2是带有链接库的600Kib,我的ProgramWP不应该超过这个重量。
这就是我在.pro文件中进行链接的方式:
unix:!macx: LIBS += -L$PWD/../../ConfigLib/Release/ -lLib1
INCLUDEPATH += $PWD/../../Lib1
DEPENDPATH += $PWD/../../Libs/Release
unix:!macx: PRE_TARGETDEPS += $PWD/../../Libs/Release/Lib1.a
我搜索并询问了一下,发现我可以在.pro文件中添加QMAKE_CXX_FLAGS+= -s
行来删除不必要的符号,并且在执行并运行qmake之后,它的重量仍然相同(就像它被忽略了一样)。我已经看到了gcc是否使用了-s参数,并重新构建了
g++ -c -pipe -std=c++11 -s -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_SCRIPT_LIB -DQT_XML_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/lib/qt4/mkspecs/linux-g++ -I../MyProject-I/usr/include/QtCore -I/usr/include/QtNetwork -I/usr/include/QtGui -I/usr/include/QtXml -I/usr/include/QtScript -I/usr/include -I../../Utils -I../../Lib1-I../../Lib2-I../../Lib3-I../../Lib4-I. -I. -I../MyProject-I. -o wp2.o ../MyProject/wpmine.cpp
正如你所看到的,似乎gcc使用了这个参数,所以……知道为什么它这么重吗?我该如何修复它吗?
非常感谢。
注意:他们的程序基本上是用eclipse和c++制作的,而我的程序是用Qt制作的。为了运行它,他们在企业的产品中安装了一些Qt库,所以另一个问题是……他们能在没有安装这些库的情况下运行我的程序吗?只是把exe放在那里并调用它?
以下是一些减少可执行文件大小的提示:
-
您可能想在可执行文件上使用
strip
(以防编译器的-s
标志出现问题) -
使用
-Os
标志进行编译可能会略微减小可执行文件的大小 -
减小可执行文件的数据段的大小。请注意,每个常量(包括字符串文字、静态数组初始化器等)都存储在可执行文件中,并增加其大小:
const char* str = "A very very long string"; // will bloat your executable BigDataType myData[] = { ... }; // will bloat your executable
-
将嵌入的资源移动到外部文件中(甚至移动到网络中)。嵌入的图标、图像、字符串等)显著增加了二进制大小。参见Qt资源
-
减少模板化代码的使用。大量使用模板(连同它们的实例化)是代码膨胀的一个众所周知的原因。这是代码大小和代码美观之间的权衡。
-
你可能想试试CopperSpice,一个Qt的分支,如果它做得更好的话。
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 终端不会为C++文件创建.exe文件吗
- 在Windows中以.exe的形式运行c++
- Visual Studio mkl_link_tool.exe链接错误
- PrintWindow函数在notepad.exe中出错
- VSCode C++ 编译的exe感染了Win32:TrojanX-gen[Trj]
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- 获取当前正在运行的 exe 名称(不是路径)
- 从 exe 文件 (Visual Studio ) 启动时调试断言失败
- 1d.exe找不到SFML文件?
- VI工作室代码错误无法打开输出文件主.exe
- 如何为每个客户生成自定义 exe
- 使用参数在 C# 的C++上运行.exe
- 在 ******.exe 中0x00000000772CA267 (ntdll.dll) 处未处理的异常:0xC0000
- 具有多种约束(例如重量、体积等)的背包
- 如何在Visual Studio Code中重命名我的a.exe文件?
- 解析引用 |exe/dll vs lib
- Q没有管理权限的 exe 无法启动维护工具
- 是什么导致了几乎为空的.exe文件的重量
- Qt:如何让我的exe"重量"更轻