当前位置:  开发笔记 > 编程语言 > 正文

Qt:如何减少我的exe的“重量”

如何解决《Qt:如何减少我的exe的“重量”》经验,为你挑选了1个好方法。

我正在Fedora上使用Qt 4.8.5制作的程序(我们将其称为ProgramWP),并基于带有其QWizardPages的QWizard结构。该程序或多或少有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为600Kibs,我的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

我搜索并询问,发现可以将QMAKE_CXX_FLAGS+= -s行添加 到.pro文件中以删除不必要的符号,并在执行并运行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放进去并调用它?



1> Ivan Aksamen..:

以下是一些减小可执行文件大小的技巧:

您可能要strip在可执行文件上使用(以防编译器的-s标志出问题)

使用-Os标志编译可能会稍微减小可执行文件的大小

减小可执行文件的数据段的大小。请注意,每个常量(包括字符串文字,静态数组初始化器等)都存储在可执行文件中,并增加其大小:

const char* str = "A very very long string"; // will bloat your executable

BigDataType myData[] = { ... }; // will bloat your executable

将嵌入式资源移动到外部文件(甚至到网络)中。嵌入式图标,图像,字符串等)会极大地增加二进制文件的大小。参见QtResource

减少模板化代码的使用。大量使用模板(以及模板的实例化)是代码膨胀的众所周知的原因。这是在代码大小和代码美之间的权衡。

如果效果更好,您可能需要尝试使用CopperSpice,它是Qt的一个分支。

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有