Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 减少Qt GUI应用程序大小_C++_Qt_Dll_Static Libraries - Fatal编程技术网

C++ 减少Qt GUI应用程序大小

C++ 减少Qt GUI应用程序大小,c++,qt,dll,static-libraries,C++,Qt,Dll,Static Libraries,我正在学习使用Qt Creator开发应用程序。我已经在Windows下构建了一个简单的应用程序,依赖于使用mingwm10.dll、QtCore4.dll、QtGui4.dll、QtNetwork4.dll。 在QtQui4.dll中,我只使用了几个小部件,不需要所有其他的。。。是否可以缩小QtGui4.dll的大小,或者执行其他操作以减小应用程序的部署大小? 静态链接怎么样?它将嵌入整个dll,还是只嵌入使用的部分dll? 使用Qt是否可以静态链接一些dll,动态链接一些dll?不可能通过删

我正在学习使用Qt Creator开发应用程序。我已经在Windows下构建了一个简单的应用程序,依赖于使用mingwm10.dll、QtCore4.dll、QtGui4.dll、QtNetwork4.dll。 在QtQui4.dll中,我只使用了几个小部件,不需要所有其他的。。。是否可以缩小QtGui4.dll的大小,或者执行其他操作以减小应用程序的部署大小? 静态链接怎么样?它将嵌入整个dll,还是只嵌入使用的部分dll?
使用Qt是否可以静态链接一些dll,动态链接一些dll?

不可能通过删除一些函数来收缩QtGui4.dll。Trolltech是,但好的解决方案似乎相当遥远:

静态链接,我认为它在windows上是非常有问题的。每次我尝试,都是一场噩梦

所以,看起来您被常规DLL卡住了。您唯一可以做的事情(我为我的Qt应用程序所做的是):

  • 用于压缩DLL

  • 在安装程序中使用强压缩

如果已经对dll进行了UPX,则无法通过安装程序压缩进一步减少dll,但这可以减少其他文件。

最好的方法是使用configure手动配置Qt库。发行

configure --help
您将看到许多可能有助于减少磁盘和内存占用的选项。例如

--no-stl
--no-exceptions

两者都可以减少应用程序的占用空间。您还可以修改mkspec,以便为编译器使用更具攻击性的优化标志。

如果静态链接,最终会得到一个1.5GB的exe,并牺牲一些插件等功能。因此,除非您不想分发DLL,否则这并不值得。但是,是的,您可以尝试Henrik的建议,也可以排除可能是最大代码块的Webkit。

是的,“UPX-9 QtGui4.dll”是一种方式:)有趣的提示,我以前从未使用过UPX。谢谢!用这种方式归档的GUI Qt应用程序的最小占用空间是多少?我认为可以删除一些不需要的功能。请参见原始问题的上下文,排除WebKit没有任何区别,因为他没有使用它(仅核心、Gui、网络模块)。