7

[解决方案]

我想在QtSDK尚未Qt安装的机器上运行我创建的应用程序。

我试图DLL'sBIN文件夹复制到我的项目的发布,但它没有工作。

我尝试了以下方法:

  • 我复制所有dll's文件夹d:\Qt\Qt5.0.1\5.0.1\mingw47_32\bin
  • 并将其粘贴到我的项目文件夹中:d:\projects\mybrowser\mybrowser-build-Desktop_Qt_5_0_1_MinGW_32bit-Release\release
  • 并将其发送到另一台计算机without Qt
  • 在计算机without Qt中,我安装vcredist_sp1_x86.exe并尝试运行我的应用程序browsertest.exe

发生以下错误:

microsoft visual c++ 运行时库:此应用程序已请求运行时以不寻常的方式终止它

问:我真正想知道的:

如何在未安装 Qt 的其他计算机 (Windows) 上运行内置 Qt 的应用程序?

细节:

  • Qt5.0.1 32位
  • mingw 4.7 32位
  • QtCreator 2.6.2
  • 视窗 7 64 位。
  • 英特尔 i5

文件夹:

  • D:\Qt\Qt5.0.1\5.0.1\mingw47_32
  • D:\Qt\Qt5.0.1\Tools\MinGW

Qt/明格:

  • D:\Qt\Qt5.0.1\5.0.1\mingw47_32\bin\qmake.exe
  • d:\Qt\Qt5.0.1\Tools\MinGW\bin\gcc.exe

文件.pro

QT += webkitwidgets network core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = browsertest
TEMPLATE = app

RC_FILE = browser.rc

SOURCES += main.cpp\
 mybrowser.cpp

HEADERS += mybrowser.h

FORMS += mybrowser.ui

如果您遗漏了任何信息,请告诉我。感激的

4

3 回答 3

11

要分发您的应用程序,您需要复制DLL(仅必要的DLL)。

  1. 从或复制必要 的DLL<DRIVE>:\Qt\Qt<Version_qt>\<Version_qt>\mingw<Version_mingw>\<DRIVE>:\Qt\Qt<Version_qt>\<Version_qt>\mingw<Version_mingw>\bin\

    例如: C:\Qt\Qt5.2.0\5.2.0\mingw48_32\C:\Qt\Qt5.2.0\5.2.0\mingw48_32\bin

  2. 粘贴应用程序的文件夹。

  3. 然后复制里面的文件夹<DRIVE>:\Qt\Qt<Version_qt>\<Version_qt>\mingw<Version_mingw>\plugins

    例如。: C:\Qt\Qt5.2.0\5.2.0\mingw48_32\plugins

  4. 粘贴应用程序的文件夹。

注意:在这个例子(下)中,需要从不同的地方复制 DLL 并删除Debug DLL(仅用于在Debug中编译)。

注意debug dlls以“d.dll”结尾的,例如:Qt5Core.dll and Qt5Cored.dll or Qt5Concurrent.dll and Qt5Concurrentd.dll,以“d.dll”结尾的不要复制。

结构应如下所示(示例):

  • c:\project\app.exe(您在Qt中创建的应用程序)
  • c:\project\Qt5Core.dll(来自qt/mingw文件夹或qt/mingw/bin的dll
  • c:\project\platforms(来自qt/mingw/plugins文件的文件夹)
  • c:\project\platforms\qminimal.dll(来自qt/mingw/plugins/platforms文件夹的dll

仅需要mingw的一些DLL,因此我建议使用Dependency Walker 2.2

结果应如下所示(并非所有 dll 都需要,这可能因项目类型而异): 应用程序文件夹


谢谢:

  • @MartinBeckett +1,向我展示了查找所需DLL的程序。

  • +1 @WouterHuysentruit,感谢我指出的应用程序,我发现mingw\plugins文件夹的内容应该直接进入应用程序文件夹。

  • @WouterHuysentruit 我会认为你的回答是正确的,但你刚刚说过,所以我做了一个更简单的解释。不管怎么说,还是要谢谢你。

于 2013-04-15T23:51:54.680 回答
2

“microsoft visual c++ 运行时库:此应用程序已请求运行时以不寻常的方式终止它”

那是一个普通的错误,或者有时是不兼容的 dll 的混合
使用您的 exe 上的(免费)依赖程序来检查它实际使用的 dll - 它可能没有链接所有 Qt

一些 Qt 库在运行时从插件文件夹加载,主要是图像格式和数据库连接 - 但它们不会给出此错误

于 2013-04-15T19:48:47.387 回答
0

windeployqt(随 QT 5.2+ 提供)应该完成(大部分?)工作

于 2015-06-15T13:45:03.280 回答