【问题标题】:C++ qt application compilation in one fileC++ qt 应用程序编译在一个文件中
【发布时间】:2021-01-01 09:50:51
【问题描述】:

我已经使用 qt 编写了 windows gui 应用程序,我想部署它。现在,当我将 .exe 放置到其他 PC 时,它显示错误,说需要 qt5core.dll 等。我可以安装这个 dll,但它可能吗使用 qt 运行 exe 应用程序而没有 qt 的 dll 作为一个文件?所以我可以例如将 .exe 给我的朋友,他可以立即运行它而无需安装 .dll?

【问题讨论】:

  • 您必须将您的可执行文件与您可能必须自己构建的静态 QT 库链接起来。我不确定 QT 是否支持这样的路径。
  • 我的建议是创建一个安装程序包,将所需的 dll 和运行时安装到标准 c:\Program Files

标签: c++ qt desktop-application


【解决方案1】:

基本上,如果你想要一个 exe 文件,你可能是指静态链接。

合法的商业版本使这成为可能,或者如果我没有错,你将不得不构建一个静态的 qt 版本。 在后一种情况下,您必须提供应用程序的源代码。

【讨论】:

【解决方案2】:

我有时会这样做,但您必须注意许可证要求:如果您使用 GPL,应该没问题,如果您选择 LGPL,可能有点less simple。不知道商业版。

您必须做的是静态构建 Qt,然后使用该 Qt 构建来构建您的应用程序。我对mxe 有很好的体验。 MXE 构建了一个完整的交叉构建环境,并允许您静态构建您的大型 Qt exe。我在 Mac OS 和 Linux 上使用它为 Windows 构建静态可执行文件,但您可能可以在 WSL 上运行它。编译需要一点时间,但使用起来很简单。请注意,如果您的应用需要 QtWebEngine,则无法使用它,因为它不会使用 mingw 构建。

另一个更简单的选择是创建安装程序。 Qt installer framework 使用简单。如果包含 VS 运行时,您最终会得到一个要分发的 exe(安装程序)。

【讨论】:

    【解决方案3】:

    在部署可执行文件时,您总是需要包含您使用的库(实际上包括您的编译器运行时库) - 否则您的应用程序将如何使用这些库中的代码?您也许能够静态链接一些/大部分内容,但很少链接所有内容。了解如何为您的应用程序创建安装程序/包,以便您可以将所有内容捆绑为一个方便的文件。

    【讨论】:

      【解决方案4】:

      您可以使用 QT Static(大型 .exe 文件,无外部依赖项)构建您的应用

      如果您使用的是 LGPL Qt,则必须阅读以下内容:

      https://www.qt.io/faq/3.7.-what-are-my-obligations-when-using-qt-under-the-lgpl

      您可以使用 Qt 和静态链接,但是“您的应用程序的用户必须能够将您的应用程序重新链接到 Qt 库的不同或修改版本”

      您可以使用这样的应用程序模板,这对 LGPL Qt 非常有用:

      https://marketplace.qt.io/products/qt-lgpl-app-template

      【讨论】:

        猜你喜欢
        • 2012-02-02
        • 2015-08-29
        • 1970-01-01
        • 2013-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多