在没有 Qt 的情况下运行 .EXE

问题描述 投票:0回答:3

我想在未安装

QtSDK
的计算机上运行使用
Qt
创建的应用程序。

我尝试将

DLL's
BIN
文件夹复制到我的项目的发布版本中,但没有成功。

我尝试了以下方法:

  • 我复制所有
    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
  • Windows 7 64 位。
  • 英特尔i5

文件夹:

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

Qt/Mingw:

  • \qmake.exe 中的 D:\Qt\Qt5.0.1 .0.1\mingw47_32
  • d:\Qt\Qt5.0.1\Tools\MinGW in\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

如果您错过任何信息,请告诉我。 感恩

qt
3个回答
11
投票

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

  1. 复制所需的DLLs

    <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 DLLs(仅用于在 Debug 中编译)。

注意

debug dlls
以“d.dll”结尾,例如:Qt5Core.dllQt5Cored.dllQt5Concurrent.dllQt5Concurrentd.dll,以“d.dll”结尾不应该被复制。

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

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

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

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


感谢:

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

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

  • @WouterHuysentruit 我认为你的答案是正确的,但你刚才说了,所以我做了一个更简单的解释。还是谢谢你了。


2
投票

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

这要么是一个普通的错误,要么有时是不兼容的 dll 的组合
使用 exe 上的(免费)depends 程序来检查它实际使用的 dll - 它可能没有链接所有 Qt

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


0
投票

windeployqt(随 QT 5.2+ 一起交付)应该完成(大部分?)工作

© www.soinside.com 2019 - 2024. All rights reserved.