【问题标题】:Qt static build - impossible sizeQt 静态构建 - 不可能的大小
【发布时间】:2014-08-21 12:55:22
【问题描述】:

我对 Qt 编程还很陌生,我尝试了很长时间来了解链接库的工作原理。我需要分发一个小程序 - 1000 行左右 - 我开发给几个人。
我静态构建 Qt 因为 我需要一个静态构建,现在我的程序大小急剧增加。

我只使用 Qpushbuttons、Qlinedits、Qlabels 和其他一些东西,我最终得到了一个超过 160Mb 的编译程序,而只有几 MB 是合理的
我假设它包括不需要的库和类(仅解释)。 如何保持静态构建可接受的大小?

我正在运行 linux 64 位,需要为此编译。

谢谢

【问题讨论】:

  • 你怎么知道Qt提供的所有平台抽象代码,几MB是合理的?
  • 您的一些 ui 内容只是冰山一角,您对自己能做什么的控制有限。但是您可以通过以下方式减少:剥离调试信息(如果有);使用 Qt5 而不是 qt4。它有更好的解耦。如果您已经在使用带有零调试符号的 qt5,那是您能得到的最好的。
  • @Angew,好吧,任何小程序的大小都不超过几 MB,我不知道我的应该有什么不同。多少MB的小gui程序你见过多少次了? (可以是基本的文本编辑器等
  • 我相信大多数 GUI 程序都动态链接 GUI 库,所以这几乎不是一个有用的比较。除了 UmNyobe 所说的之外,您能做的最好的事情就是在您的链接行中搜索任何虚假的 --whole-archive 选项,并尝试使用其他链接器选项(例如 -s-S)。
  • 嘿@Angew 数千个文件,每个文件最大 15kb,每个文件代表一个包含,总共几个 Gbs。好吧,包括一些带来了其他几个,但仍然......(顺便说一句:fwiw?我不得不谷歌那个。)你说通常程序是动态链接的,这部分是正确的,但是它们如何在计算机上工作没有图书馆?对于大多数依赖项,它们必须静态链接,但它们不像我的东西那么重。怎么会?有什么我不知道的?

标签: c++ qt static-linking shared-libraries


【解决方案1】:

我假设您正在调试模式下构建项目。我建议以发布模式构建应用程序。输出文件的大小将大幅减小。

【讨论】:

    【解决方案2】:

    没错,你需要在发布模式下构建qt。我已经建立 qt 几年了。我做过的最好和最简单的方法是(Linux 和 Windows):

    1. 安装 Qt 源。 (最后可用)

    2. 安装 Python 2.7.X 以构建 QML(最后可用)

    3. 打开终端,在src目录下执行configure命令:

    LINUX:
    ./configure -prefix "/somePath/Qt511Static" -static -release -opensource -confirm-license -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -fontconfig -qt-xcb -opengl desktop -sql-sqlite -make libs -nomake tools -nomake examples -nomake tests -skip qtwebengine

    WINDOWS:
    configure -prefix "/somePath/Qt511Static" -static -static-runtime -release -opensource -confirm-license -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -opengl desktop -sql-sqlite -make libs -nomake tools -nomake examples -nomake tests -skip qtwebengine

    1. 构建:make -k -jN (Linux) 或 mingw32-make -k -jN (Windows)

    2. 安装:make -k install (Linux) 或 mingw32-make -k -jN (Windows)

    3. 在 Qt Creator 中设置套件。
      转到 Tools -> Options -> Build & Run -> Qt Versions 并搜索您新安装的 qmake 可执行文件。 应用更改。然后转到 Kits 并创建一个新工具包并在其上设置新的 qt 版本。

    注意:使用标志-release 制作更小的应用程序(~20 MB)。

    注意:使用标志-jN 可以更快地构建(使用多个作业)。将N 替换为您的处理器的内核数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-01
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多