我正在 Fedora 上用 Qt 4.8.5 制作一个程序(我们称它为 ProgramWP),它基于 QWizard 结构及其 QWizardPages。该程序大约有 50 个类,其中 30 个是 QWizardPages。
问题是程序可执行“权重”(不知道英文单词/表达式)8Mb(发行版),我想知道:
- 为什么它这么重?这是什么原因?
- 我怎样才能减少它?
我需要减少它,因为在企业的产品中,有一些应用程序在运行,其中一些是我的。支持 exe:
- ProgramMAIN (1.5MiB):企业主程序。
- ProgramMAIN2(600KiB):企业的另一个重要程序。
- ProgramWP(8MiB):我的主程序(用 Qt 制作)。
- ProgramMINI(2.5Mib):我的主程序的迷你版(用 Qt 制作)。
- Program3(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 放在那里并调用它?
最佳答案
这里有一些减少可执行文件大小的技巧:
您可能想使用
strip
在您的可执行文件上(以防编译器的-s
标志出现问题)使用
-Os
标志编译可能会稍微减少可执行文件的大小减小可执行文件数据段的大小。请注意,每个常量(包括字符串文字、静态数组初始值设定项等)都存储在可执行文件中并增加其大小:
const char* str = "A very very long string"; // will bloat your executable BigDataType myData[] = { ... }; // will bloat your executable
将嵌入式资源移动到外部文件(甚至网络)。嵌入的图标、图像、字符串等)会显着增加二进制文件的大小。参见 QtResource
减少模板代码的使用。大量使用模板(连同它们的实例化)是代码膨胀的一个众所周知的原因。这是代码大小和代码美观之间的权衡。
你可能想试试 CopperSpice ,Qt 的一个分支,如果它做得更好的话。
关于c++ - Qt:我怎样才能减少我的exe 'weight',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34265858/