Qt5部署Windows应用

本文地址:http://www.cnblogs.com/neochin/p/3267097.htmlhtml

概述:windows

Qt5应用程序的部署与以前版本之间的差别,主要是须要增长Qt里plugins/platforms/下的dll的部署。app

官方文档:http://doc-snapshot.qt-project.org/qt5-stable/qtdoc/deployment-windows.html函数

 

测试环境与工具:工具

Windows 8 64bit测试

Windows Xp 32bitui

Qt 5.1.0 Mingw4.8 32bit spa

Dependency Walker 2.2插件

 

步骤:code

用简单的Qt Gui应用程序myapp举例说明。

  1. Release发布应用程序,并将该exe放到应用程序目录"/myapp/"中,目录结构为:"/myapp/myapp.exe"。
  2. 使用Dependency Walker打开myapp.exe,查看依赖的dll。也能够运行程序,记下 程序提示缺乏的dll。
  3. 找到Qt的dll目录,个人在"D:\Qt\Qt5.1.0\5.1.0\mingw48_32\bin"下,把缺乏的dll复制到"/myapp/"下(有些缺乏的dll是系统目录下的,不用复制,你只用把qt dll目录有的复制过来便可)。此时双击程序已经能够运行了,但还没能部署完。
  4. 在"/myapp/"目录下,新建文件夹"platforms",把"D:\Qt\Qt5.1.0\5.1.0\mingw48_32\plugins\platforms"目录下的qwindows.dll(可能不仅缺乏这个dll,依状况而定)复制进来,目录结构为"/myapp/platforms/qwindows.dll",如今就成功部署了。

 

我还想问点为何:

如下是本身测试获得的结论。

  • qwindows.dll是The Qt Windows platform plugin,对平台的支持使用插件的方式提供。
  • 在已安装了的Qt机器下,不复制qwindows.dll时,为何程序也能够运行?QCoreApplication中有QCoreApplication::libraryPaths()函数及相关函数能够对库目录动态设置。经过如下代码:
    QApplication a(argc, argv);
    qDebug()<<a.libraryPaths();

    可获得默认的库目录,在我测试环境下目录为:"D:/Qt/Qt5.1.0/5.1.0/mingw48_32/plugins", "D:/projects/qt_code/build-myapp/release"。由第一个目录看得出来,为何在本身机器上能默认找到platforms/qwindows.dll了。

  • 上一点中提到的plugins目录,应用程序是如何知道要去设置这个库目录的? 应用程序用什么方式获得Qt的安装目录,并取得标准插件目录?Qt目录是经过读注册表而来,仍是Qt工程在编译的时候,就把安装目录固定死,植入了App.EXE中?       答案是:这个目录是固定死的,可是是在QtCore.dll中。  我想,这应该是Qt在安装的时候,修改过或是临时生成QtCore.dll,因此QtCore.dll中这个值,跟安装时候的配置有关。   下面可能就有这样一个问题:若是你的Qt在安装在D盘,后来你用剪切的方式,把Qt目录移到了E盘,QtCore.dll便不能帮你找到plugins/目录了。
相关文章
相关标签/搜索