不使用Qt运行.EXE

时间:2013-04-15 19:08:58

标签: qt compiler-construction

[Solution]

我想在未安装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 32bit
  • mingw 4.7 32bit
  • QtCreator 2.6.2
  • Windows 7 64位。
  • Intel i5

文件夹:

  • d:\ Qt的\ Qt5.0.1 \ 5.0.1 \ mingw47_32
  • d:\ Qt的\ Qt5.0.1 \工具\ MinGW的

QT / MinGW的:

  • d:\ Qt的\ Qt5.0.1 \ 5.0.1 \ mingw47_32 \ BIN \ qmake.exe
  • d:\ Qt的\ Qt5.0.1 \工具\ 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

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

3 个答案:

答案 0 :(得分: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. 粘贴应用程序的文件夹。

  5.   

    注意:在此示例(下面)中,有必要从不同位置复制DLL并删除调试DLL (仅用于在调试中编译)。 / p>      

    请注意,debug dlls以“d.dll”结尾,例如: Qt5Core.dll Qt5Cored.dll Qt5Concurrent.dll Qt5Concurrentd.dll ,不应复制带有“d.dll”的结尾。

    结构看起来应该是这样的(例子):

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

    只需要一些 DLL mingw ,所以我建议使用Dependency Walker 2.2

    结果应如下所示(并非所有dll都需要,这可能因项目类型而异): app folder


    感谢:

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

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

      < / LI>
    • @WouterHuysentruit我会认为你的答案是正确的,但你刚才说,所以我做了一个更简单的解释。无论如何,谢谢。

答案 1 :(得分:2)

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

这可能是一个普通的bug,或者有时混合不兼容的dll 使用你的exe上的(免费)depends程序检查它实际使用的dll - 它可能没有链接所有的Qt

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

答案 2 :(得分:0)

windeployqt(随QT 5.2+提供)应该(大多数?)工作