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

iVi*_*iVi 5 qt

所有需要的.dll文件的应用程序大小非常大(几乎30 MB).我怎么能减小这个尺寸?

rub*_*nvb 5

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

  1. 禁用您不使用的Qt功能.请参阅有关该主题的官方文档.
  2. 使用较旧的Qt版本,其对ICU的依赖性较小,总共较少的库.
  3. 使用链接时优化(包括Qt DLL)构建所有内容.您的里程可能会有所不同(您甚至可能会变大,但在此过程中会更快).
  4. 静态构建所有内容,并仅链接您需要的内容.请注意,这很大程度上取决于链接器和编译器消除死代码的能力.这可能是也可能不值得:通常,大多数DLL的内容都被使用,所以你可能只会削减MB左右.某些编译器(尤其是MSVC)无法处理导致的目标文件大小(可能仅在与#2结合使用时).
  5. 不在乎:我们生活在宽带互联网时代.使用例如7z压缩分布式软件包以最大限度地缩短下载时间.
  6. UPX之类的东西压缩你的二进制文件.将部分缓解#4.

我只跟4去.

  • 对我来说有太多糟糕的解决方案,例如,我无法使用旧版本并静态构建此应用程序.但我会尝试做些什么. (2认同)
  • @Adam我说你错了.如果您提供可以链接到不同版本的Qt(静态)的目标文件,请求,您将完成LGPL(授权您也对Qt public进行任何修改).这是针对静态链接的情况. (2认同)
  • @DrumM 静态链接时,理论上您确切地知道哪些代码从未使用过,并且可以将其丢弃。动态链接时,您只知道每个库的这一点,因此每个库将至少包含它需要的代码,以及您的单独应用程序从未真正使用的所有内容。 (2认同)

lpa*_*app 2

除了通用原则(剥离二进制文件,如果您对 C++ 感到满意,请勿使用 QML 等),我认为您需要为此使用配置来禁用您不需要的功能:

包含或排除功能

-feature- 和 -no-feature- 选项分别包括和排除特定功能,其中列出在文件 qtbase/src/corelib/global/qfeatures.txt 中。例如,要禁用辅助功能,请提供 -no-feature-accessibility 作为参数:

./configure-无功能可访问性

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