我正在使用Qt 4.8.5在Fedora上创建一个程序(让我们称之为ProgramWP),并基于QWizard结构及其QWizardPages。该程序有或多或少50个类,其中30个是QWizardPages。
事情是程序可执行的权重' (不知道英文单词/表达)8Mb(发布版本),我想知道:
我需要减少它,因为在企业的产品中,有一些应用程序在运行,其中一些是我的。为了支持exe:
正如你所看到的那样,我的主程序权重比主要程序要大得多,而主程序的权重要大得多(ProgramWP只是一个配置一些简单程序的小程序)。
我在ProgramWP和ProgramMINI中静态链接了一些libs,但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之后,它仍然具有相同的权重(It&# 39;如果它被忽略了就好了。我看看gcc是否使用-s param并重建我得到:
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并调用它?
答案 0 :(得分:5)
以下是一些减少可执行文件大小的提示:
您可能希望在可执行文件中使用strip
(如果编译器出现问题-s
标记)
使用-Os
标志进行编译可能会略微减少可执行文件的大小
减小可执行文件数据段的大小。请注意,每个常量(包括字符串文字,静态数组初始值设定项等)都存储在可执行文件中并增加它的大小:
const char* str = "A very very long string"; // will bloat your executable
BigDataType myData[] = { ... }; // will bloat your executable
将嵌入式资源移动到外部文件(甚至是网络)。嵌入的图标,图像,字符串等)显着增加二进制大小。请参阅QtResource
减少模板化代码的使用。大量使用模板(以及它们的实例化)是众所周知的代码膨胀的原因。这是代码大小和代码美之间的权衡。
你可能想尝试CopperSpice,Qt的分支,如果它做得更好。