【发布时间】:2015-12-14 11:25:07
【问题描述】:
我正在Fedora 上使用Qt 4.8.5 制作一个程序(我们称之为ProgramWP),它基于带有QWizardPages 的QWizard 结构。该程序大约有 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 与链接库的大小为 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
我已经搜索并询问,发现我可以将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放在那里然后调用它?
【问题讨论】:
-
可执行文件和它一样大,因为 Qt 是一个臃肿的库。想让它变小吗?远离 Qt。
-
哈哈哈太好了 :) 但是我的老板希望这个程序是用 Qt 制作的,现在他们希望它比他们的程序更轻……我会在主帖中添加一个关于它的注释,因为他们的程序是用eclipse和c++编写的
-
EXE 的大小无关紧要。如果要部署 Qt 应用程序,则必须在应用程序旁边提供支持库(Windows 上的 DLL)。对于什么都不做的标准应用程序,它们的大小约为 30MiB。
-
我怎样才能减轻我的前任体重。关闭主题,因为关系和健康相关问题都不适合 stackoverflow ;)
-
@Drop 等等... WHAAAAAAAT!!!我使用了像
strip exename这样的条带,它从 8Mib 变成了 550KiB O.o 哇!我想它仍然会完美运行,但它令人难以置信!在将其发布为答案并接受之前...我没有多种语言,是的数组字节,不知道这里有什么着色器代码...但是您的意思是使用 xml 例如来放置一些信息?