Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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
如何最小化Qt应用程序的大小?_Qt - Fatal编程技术网

如何最小化Qt应用程序的大小?

如何最小化Qt应用程序的大小?,qt,Qt,包含所有必需的.dll文件的应用程序的大小非常大(几乎30 mb)。如何减少这个大小?< p>除一般原则外(不使用QML,如果你对C++等很满意),我想你需要使用配置,你不需要: 包括或排除特征 -feature和-no-feature选项分别包括和排除特定的特征,其中在文件qtbase/src/corelib/global/qfeatures.txt中列出。 例如,要禁用可访问性,请提供-no feature Accessibility作为参数: /配置-无功能可访问性 免责声明:您在自己的领

包含所有必需的.dll文件的应用程序的大小非常大(几乎30 mb)。如何减少这个大小?

< p>除一般原则外(不使用QML,如果你对C++等很满意),我想你需要使用配置,你不需要:

包括或排除特征

-feature和-no-feature选项分别包括和排除特定的特征,其中在文件qtbase/src/corelib/global/qfeatures.txt中列出。 例如,要禁用可访问性,请提供-no feature Accessibility作为参数:

/配置-无功能可访问性


免责声明:您在自己的领域内处理此问题,因此可能会遇到许多需要解决的问题。

理论上,您可以执行以下任一操作:

  • 禁用不使用的Qt功能。看
  • 使用较旧的Qt版本,该版本对ICU等设备的依赖性较低,并且总库数较少
  • 使用链接时间优化构建所有内容,包括Qt DLL。你的里程数可能会有所不同(你甚至可能会变得更大,但在这个过程中会更快)
  • 静态构建所有内容,并仅链接您需要的内容。请注意,这在很大程度上取决于链接器和编译器消除死代码的能力。这可能值得,也可能不值得:通常情况下,DLL的大部分内容都被使用,因此您可能只会减少MB左右。某些编译器(尤其是MSVC)无法处理由此产生的对象文件大小(可能只有与#2结合使用时)
  • 不在乎:我们生活在宽带互联网时代。使用例如7z压缩您的分布式软件包,以尽量减少下载时间
  • 用类似的东西压缩二进制文件。将部分缓解#4

  • 我只选择4。

    不要使用Qt。撇开半开玩笑不谈,你需要研究选择功能来包含你真正需要的东西,但这还没有经过测试,而且不管怎样,Qt在默认情况下只是歌利亚。你知道Qt的好替代品吗?当然,这是我们在资源关键嵌入式上使用的,尽管你甚至可以用自己的解决方案来去除X,等等。即使使用X,它也是1MB左右。;-)你确定窗户会这么小吗?没有库的Qt应用程序在Linux(例如KDE)上非常小。QtCore大于4MB,然后您还没有任何图形。如果你指的是一个原始的C++应用程序不使用Qt,显然,这是小的,但这不是QT问题。对我来说,有太多糟糕的解决方案,例如,我不能使用旧版本静态地构建这个应用程序。但是我会尝试做一些事情。注意,静态链接意味着您已经购买了Qt许可证,并且不再按照LGPL条款使用。@Adam这是错误的。如果您提供的代码二进制文件(如果有人要求)可以链接到不同的Qt版本,您仍然可以满足LGPL的要求。@Adam我是说您错了。如果您根据请求提供可以链接到另一个Qt构建(静态)的对象文件,那么您就已经完成了LGPL(允许您也对Qt public进行任何修改)。这是针对静态链接的情况。@DrumM当静态链接时,理论上你完全知道什么代码从未被使用过,你可以扔掉它。动态链接时,您只知道每个库的代码,因此每个库至少包含它所需的代码,以及单独应用程序从未真正使用过的所有代码。