2011-11-29 111 views
13

我一直在网上搜索一些有用的和明确的信息,这很烦人,这样一个微不足道的事情是很难做到的。如何为Qt应用程序创建可执行文件?

我需要的是为我的Qt项目创建一个可执行文件,以便在其他计算机上运行它。我的项目在Qt Creator中运行得很好,但是当我尝试运行在release文件夹中创建的可执行文件时,我得到了关于某些dll缺失的错误,尽管我已经将它们全部放在我的.exe的同一目录中,但现在我得到了一些有关DLL中的过程入口点错误(QtCore4.dll)的错误。

该解决方案看起来像一个静态链接,我发现了很多关于它的信息,但没有一个真正帮助我。这是我迄今为止所尝试的:

  • 如上所述使用在release文件夹中创建的可执行文件。
  • 静态链接,遵循本教程(和其他许多内容几乎完全相同):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项目的可执行文件,希望你们能在这里给我一些光。

+0

请参阅此相关的问题http://stackoverflow.com/questions/1011197/qt-static-linking-and-deployment/1654833#1654833 –

+0

我之前发现它,但我得到了错误 NMAKE:致命错误U1077:'“c:\ Arquivos de programas \ Microsoft Visual Studio 9.0 \ VC \ BIN \ cl.EXE”':返回代码'0x2'停止。建立qmake失败,返回代码2 当我尝试运行配置,我无法找到答案。 但谢谢。 –

回答

14

基本上你必须寻找深入QT树,其中qt实用程序驻留,并复制所需的DLL的mingw子文件夹。

这些是我遵循的基于QT 4.7.4的步骤,用于将应用程序打包到正确的共享库。

  1. 假设你已经在C安装QT:\ QTSDK
  2. 打开您的项目,并在释放模式编译。
  3. 转至此目录:C:\ QtSDK \ Desktop \ Qt \ 4.7.4 \ mingw \ bin - 它包含所有共享库。调试库以“d”端 - FREX,QtCore.dll是发行版,而QtCoreD.dll是调试版本
  4. 复制至少这些文件到你的发布目录(其中您的.exe谎言)

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

    我只是用这种方式构建,测试并部署了一个虚拟项目。

+1

我没有该目录(mingw \ bin),可能是因为我正在使用Visual Studio? 无论如何,我从那里复制所有的dll文件到我的.exe文件,它的工作。它不是最好的解决方案,但它现在可以工作。谢谢。 –

+1

您可以开始逐个删除dll文件,并检查程序是否仍在运行。这样你可以很容易地找出哪些是需要的。这就是我通常在处理DLL依赖时所做的事情。 – sashoalm

+0

我不知道你是否在VS2008中配置.PRO文件,但是某些qt功能需要它们自己的dll。 (QtSql等)。大多数情况下,只需使用QtCore.dll和QtGui.dll即可。当您使用网络通信,sql,webkit等高级功能时,请检查文档:您可能会得到指向所用库的指针。您还可以使用Dependency Walker来查看您的exe需要什么DLL。 –

1

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

首先,如果您静态链接,则不需要任何Qt * .dll,因为它已内置到应用程序中。因此,这意味着您的应用程序是使用动态链接构建的。

从我的经验,最安全的方式得到这一切的工作是:

下载Qt的根源,建立与NMAKE安装它们(使用Visual Studio命令提示符,从菜单开始 - >应用程序 - > Visual Studio 2008中) 。请记住,静态链接应用程序的大小取决于* .libs的大小,并且这些取决于预构建配置,例如,通过关闭某些功能可以最小化应用程序的大小(这是比如说配置用于MacOSX的,只是看出来具体的那些适用于Windows,并添加适当的plaftorm - 见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插件为您的Qt项目(here) 。

祝你好运! :)

+0

请注意,静态链接需要许可证或您的代码是开源的。 – paulm

+0

@paulm为什么静态链接需要许可证?这是从Qt具体? (我是新的,所以问) – inblueswithu

+0

它的LGPL/GPL许可证授权,在这里搜索SO找到细节 – paulm

2

下面是我做了一些工作后,我确定你的程序是在Qtcreator内建立的,进入包含你的exe的目录并双击它(我正在使用窗口,不知道它是否在其他平台上是相同的)。一个窗口应该弹出告诉你哪个.dll丢失。转到安装Qt的目录并在搜索栏中键入确切的名称(右上角Windows 7)和dll应显示在搜索结果中。右键单击并选择打开的文件位置。复制exe文件所在的位置。双击exe文件。如果缺少另一个.dll文件,则重复同样的操作,直到无失踪。最后你的程序应该运行。 希望这有助于。

相关问题