如何为Qt应用程序创建可执行文件?

21

我一直在网上寻找有关此事的有用和清晰的信息,令人恼火的是如此微不足道的事情竟然如此难以做到。

我需要为我的Qt项目创建一个可执行文件,以便在其他计算机上运行。我的项目在Qt Creator中运行得很好,但是当我尝试运行在发布文件夹中创建的可执行文件时,我会收到一些dll缺失的错误提示,虽然我已经将所有dll放置在我的.exe相同的目录下,但现在我收到了一些关于dll内过程入口点的错误提示(QtCore4.dll)。

解决方案看起来似乎是静态链接,我已经找到了许多相关信息,但它们都没有真正帮助到我。以下是迄今为止我尝试过的:

  • 像我上面说的那样使用在发布文件夹中创建的可执行文件。
  • 静态链接,按照此教程(以及许多其他几乎相同的教程)操作: http://doc.qt.io/qt-4.8/deployment-windows.html 但在“configure -static”期间出现以下错误:NMAKE:致命错误 U1077:‘“c:\Arquivos de programas\Microsoft Visual Studio 9.0\VC\BIN\cl.EXE”':返回代码‘0x2' 停止。构建qmake失败,返回代码为2

对于这个问题我找不到任何解决方案,所以在这里,我只是试图为我的Qt项目创建一个可执行文件,希望你们能给我一些指引。


请参考以下相关问题:https://dev59.com/7nNA5IYBdhLWcg3wUMDn#1654833 - Paul Dixon
我之前找到过它,但是我遇到了错误NMAKE:致命错误U1077:“'c:\Arquivos de programas\Microsoft Visual Studio 9.0\VC\BIN\cl.EXE'”:返回代码“0x2”Stop。构建qmake失败,返回代码2当我尝试运行configure时,我找不到答案... 但还是谢谢。 - Paulo Facó
5个回答

21

基本上,您需要在Qt目录中深入查找mingw子文件夹,其中包含Qt工具,并复制所需的dll。

以下是我遵循的步骤(基于QT 4.7.4)来使用正确的共享库打包应用程序。

  1. 假设您已在c:\ qtsdk下安装了QT
  2. 打开您的项目,并以发布模式编译它。
  3. 转到此目录:C:\ QtSDK \ Desktop \ Qt \ 4.7.4 \ mingw \ bin -- 它包含所有共享库。调试库以“d”结尾,例如QtCore.dll是发布版本,而QtCoreD.dll是调试版本
  4. 至少这些文件复制到发布目录中(即exe所在的位置)

    • mingwm10.dll
    • libgcc_s_dw2-1.dll
    • QtCore4.dll
    • QtGui4.dll

    我刚刚通过这种方式构建、测试和部署了一个虚拟项目。


1
我没有那个目录(mingw\bin),可能是因为我正在使用Visual Studio? 无论如何,我将所有的dll文件从那里复制到我的.exe文件中,它可以工作。虽然这不是最好的解决方案,但现在它能够工作了。谢谢。 - Paulo Facó
1
你可以逐个删除dll文件并检查程序是否仍在运行。这样你就可以轻松地找出哪些是必需的。这就是我处理DLL依赖关系时通常采取的方法。 - sashoalm
我不知道你是否在VS2008中配置了.PRO文件,但有些Qt功能需要它们自己的DLL(如QtSql等)。大多数情况下,只使用QtCore.dll和QtGui.dll就可以了。如果你使用高级特性,如网络通信、SQL、WebKit等,请查看文档:你可能会得到指向所用库的指针。你也可以使用Dependency Walker查看你的exe需要哪些DLL。 - Max Lambertini
2023年的注释:第4步中的文件可能不适用于Qt5和Qt6。生成的.exe文件可能会请求进一步的文件,我能够在我的QT版本所在的位置找到这些文件。 - HFOrangefish

8

请按照以下步骤操作:

1- 打开 QT 命令行窗口。

QT 命令行窗口

2- 切换到 .exe 文件所在的目录(使用 cd 命令)。

3- 运行 windeployqt.exe --quick . 命令。

4- 运行你的 exe 文件并享受它吧!

这个视频非常好


为了部署到不同的文件夹,我不得不复制.dlls以及platform/目录。 - Ralph

3
这是我做的,经过一段时间后,它终于运作起来了。在确保程序在Qtcreator中构建成功后,进入包含.exe文件的目录并双击它(我使用的是Windows,不知道在其他平台上是否相同)。一个窗口应该会弹出,告诉你缺少哪个.dll文件。前往Qt安装目录,在搜索栏中输入确切的名称,dll文件应该会出现在搜索结果中。右键单击并选择打开文件位置,将文件复制到.exe所在的目录。再次双击.exe文件,如果还有其他.dll文件缺失,请重复上述步骤,直到没有缺失为止。最后,程序应该会运行。 希望对您有所帮助。

2

您已经下载了Qt SDK,并且想要将Qt库静态链接到您的应用程序中,对吧?

首先,如果您进行静态链接,那么您不需要任何Qt*.dll文件存在于任何地方,因为它已经构建到应用程序中。这就意味着您的应用程序是使用动态链接构建的。

根据我的经验,让所有东西都正常工作的最安全的方法是:

下载Qt源代码,使用nmake构建并安装它们(使用Visual Studio命令提示符,从开始菜单->应用程序->Visual Studio 2008)。只需记住,静态链接应用程序的大小取决于*.libs的大小,而这些又取决于预构建配置,例如,您可以通过关闭某些功能来最小化应用程序的大小(这是MacOSX的示例配置,只需注意Windows特定的配置并添加适当的平台-有关详细信息,请参见configure.exe --help):

./configure -arch x86 -platform macx-g++ --universal -cocoa -debug-and-release -opensource -static -fast -no-accessibility -no-sql-sqlite -no-qt3support -no-opengl -no-openvg -qt-zlib -no-gif -no-libmng -qt-libmng -no-libtiff -qt-libjpeg -no-3dnow -sse -no-sse2 -no-openssl -no-dbus -no-phonon -no-multimedia -no-audio-backend -webkit -no-script -no-scripttools -no-declarative -nomake demos -nomake examples -no-exceptions -no-accessibility -confirm-license

安装、设置并使用Visual Studio Add-In来处理您的Qt项目(在此处下载)。

祝好运!:)


2
请注意,静态链接需要许可证或您的代码必须开源。 - paulm
@paulm 为什么静态链接需要许可证?这是Qt特定的吗?(我是新手,所以问一下) - inblueswithu
这是LGPL/GPL许可证所规定的,可以在SO上搜索以获取详细信息。 - paulm

1

我和大家分享我的解决方案。在我的 qt creator 4.2.1上,我执行了以下步骤:

1) - C:\Users\Samir\Documents\Qt-Projects\build-Calculator-Desktop_Qt_5_8_0_MinGW_32bit-Release

2) - 我打开了终端qt 5.8 for desktop并导航到我的项目目录,其中包含.exe文件。
3) - 最后,我运行了命令行windeployqt.exe --quick .。这个命令让我生成了缺失的库。

现在一切都正常工作了!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接