【问题标题】:Technique for smaller Qt setups of C++ apps用于 C++ 应用程序的较小 Qt 设置的技术
【发布时间】:2013-09-12 15:00:23
【问题描述】:

我对我的 C++ 有点生疏,因为我是一名 PHP 开发人员,并且只在大学时接触过 C/C++,而十年前在一个项目中使用过 C#。我公司的一位 C++ 开发人员正在使用 Qt 库。他说我们需要在 setup.exe 中放入大约 15MB 的 Qt 库内容,这对我来说似乎有点大。

有没有办法更改 Visual Studio C++ 编译器设置,以便它只从 Qt 库中挑选出它实际使用的库及其依赖项,而不需要运送这么大的 15MB Qt 库东西在 setup.exe 中?

【问题讨论】:

  • C# 需要 250+ MB 的 .NET 框架,AFAIK。最有可能的是,Qt 的 15+MB 是最小集(QtCore + QtGui + 一些支持模块)。您可以删除您的应用不使用的 dll,但剩余的 dll 仍将占用 10 多兆字节。如果您使用的是 mingw,则可以切换到 microsoft 编译器(它会生成更小的可执行文件),仅此而已。

标签: c++ qt compiler-construction compilation


【解决方案1】:

您可以静态编译 Qt。它可能会或可能不会减少您最终项目的规模。你需要根据具体情况来弄清楚。我的经验是,启用链接时间代码生成 (LTCG) 时,不值得花费大量链接时间。 LTCG 通常是值得的,因为它不仅可以加快速度,而且通常还可以减少代码大小。

作为一种实际措施,您可以使用动态 Qt 库进行调试构建,仅使用静态 Qt 进行发布构建。您最终会向 Qt Creator 添加两个 Qt“版本”和两个 Qt 工具包。在 Creator 的说法中,一个 Qt“版本”仅仅是一个 Qt 构建。因此,如果您有一个 Qt 版本的两个构建(一个静态库,一个共享库),尽管共享一个版本号,但它们将是两个“版本”。

对于简单的图形应用程序,Qt 5 提供了一个新的好处。如果您不关心整个 Widget 机制并且可以自己绘制一个简单的窗口,那么很有可能拥有一个使用 coregui 模块而不使用 widgets 模块的应用程序。见the raster window example。这可以节省几兆字节的模块。从概念上讲,这就像拥有一个带有良好图形引擎的基本 MS-DOS 应用程序:)

在 Qt 4 中没有单独的 widgets 模块,它被捆绑在 gui 模块中。

【讨论】:

    【解决方案2】:

    当您创建一个 Qt 应用程序时,您只包含所需的模块(QtCore、QtGui 等,..)

    您将包含的模块越多,库的重量就会越大。

    与其他框架相比,15 MB 并不算大。

    【讨论】:

      【解决方案3】:

      简短的回答:

      视情况而定。问题中没有足够的信息来彻底回答。

      长答案:

      Qt 已经发展成为一个非常强大和灵活的工具套件。根据开发人员对 Qt 的使用,它可以轻松使用多个库。目前,在我的/usr/lib64 中,我只看到 17 个独特的 Qt 库。这意味着 Qt 提供的所有功能仅包含在 17 个库中。

      例如,一个基本的可执行文件可以使用libQtCorelibQtGui 来生成二进制文件。虽然添加了ping 命令的简单对话框可以包含前面提到的添加libQtNetwork 的两个库。我很难相信开发人员故意包含了无关的库。

      所以,虽然我猜您的开发人员是一个“好人”并且没有包含他不需要的库,但他可能有。检查并查看。

      老实说,15 Mb 并不是很大,尤其是当我们有千兆以太网和 98347082 GB 笔式驱动器时。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-13
        • 2010-12-06
        相关资源
        最近更新 更多