Qt 程序在 Windows 下的发布

本文讨论在 Windows 平台下编译成功的 Qt 程序,如何在未配置 Qt 开发环境的 Windows 平台下独立运行的方法。

经过验证发现,在 Ubuntu 平台下编译成功的程序可在未安装 Qt 开发环境下的 Ubuntu16.04 中运行,所以,本文仅讨论,在 Windows 平台下编译成功的 Qt 程序,在未配置 Qt 开发环境的 Windows 平台下独立运行的方法。

1. 编译模式选择

如若想要发布程序,在 IDE 中编译一定要选择 release 而不是 debug,编译成 release 版本相比于 debug 版本,程序体积「可执行文件和 dll 文件」大大减小;

编译模式选择

2. 集成所需 dll 文件及其他依赖库

编译为 release 版本之后,找到生成的目录,其中只有 exe 扩展名的可执行文件是有用的。

编译生成目录

直接打开可执行文件,会提示找不到 dll 文件,解决方法如下:

2.1 使用 Qt 自带的 windeployqt.exe 寻找依赖文件

在 cmd 中,运行如下命令:

<Qt目录>\Qt5.5.1\5.5\mingw492_32\bin\windeployqt.exe   <*.exe>

程序会找到该可执行程序所需的所有依赖文件,并集成进该可执行文件所在的目录:

windeployqt 寻找依赖

有时程序会提示找不到所需的 gcc.exe,只需要将随 Qt 安装的 mingw 的 bin 目录添加到系统的环境变量中即可。之后执行可执行文件即可成功运行。

2.2 手动集成所需的依赖文件

这里,我们可以用 Process Explore 来获取所依赖的 dll 文件「Dependency Walker软件也是不错的选择」

打开 procexp.exe,选择菜单 -> View -> Lower Pane View ->DLLs 勾选此选项,显示 dll 窗口。

在 Qt Creater 中,调试运行要发布的程序,在 Process Explore 中,找到该 exe 文件并选中,在下面就看到依赖的 dll 了。

Process Explore寻找依赖

Process Explore寻找依赖

Dependency Walker寻找依赖

Dependency Walker寻找依赖

系统目录下的,一般不用关心,按 Path 排序,寻找 Qt 目录及 mingw 目录下的 dll 文件,将这些 dll 拷贝至发布程序目录下。

以 mingw 版 Qt 为例「VS版本安装目录有些许不同」,dll 文件在 Qt 安装目录下:

<Qt安装目录>\Qt5.5.1\5.5\mingw492_32\bin

找到所有所需的 dll 文件,复制到要发布程序的目录下

Qt运行目录

例如,本程序需要如下依赖:

该程序所需依赖

3. 打包为单个可执行文件

打包工具,这里选用 Enigma Virtual Box,运行软件,选择发布程序的可执行文件路径以及生成文件的路径,左下角的“添加”按钮添加所有的 dll 文件,不包含刚才选择的 exe 文件。点击右下角的「文件选项」,选中「启用文件虚拟化」以及「压缩文件」,如图所示:

Enigma Virtual Box的使用

最后点击右下角的“执行封包”,生成的 exe 文件的容量小了很多,并且这是一个纯粹的「绿色软件」,直接复制就能在任何存储介质上运行了。

4. Qt5 主要依赖链接库说明

4.1 Qt 模块库

  • Qt5Core.dll #QT核心库
  • Qt5Gui.dll #QT Gui库
  • Qt5Widgets.dll #QT Widgets库,QT 5中GUI程序基本都需要此dll
  • 还有其他程序用到的Qt5XXX.dll

4.2 ICU 依赖库「International Component for Unicode,Unicode工具」

  • icudt51.dll
  • icuin51.dll
  • icuuc51.dll

4.3 Qt 插件库「新增库,路径必须正确」

根据不同的程序,需要不同的插件库。例如 QT_DIR/plugins/*/*.dll,需要将 platforms/*.dll , accessible/*.dll 的文件结构保留,放在你所编译的程序所在目录,例如:

plugins/platforms/qwindows.dll
plugins/accessible/qtaccessiblewidgets.dll

4.4 EGL 依赖库,为 OpenGL, OpenGLes 提供接口

  • libEGL.dll
  • libGLESv2.dll

4.5 mingw 依赖库「msvc 编译则无需这些库」

  • libgcc_s_dw2-1.dll
  • libstdc++-6.dll
  • libwinpthread-1.dll

4.6 VC 运行库「mingw 编译则无需这些库」

  • msvcr110.dll「对应VS2012」
  • msvcp110.dll

5. 参考资料

  1. Qt 5.5 程序打包发布以及依赖
  2. Qt 在 Windows 上发布之所需运行库「一」
  3. 将 Qt 动态链接生成的 exe 及依赖 dll 打包方法
  4. Qt 5 编译 & 打包依赖 dll 发布

作者:雪中亮
链接:http://www.jianshu.com/p/1462977095d7
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

时间: 2024-12-18 19:24:42

Qt 程序在 Windows 下的发布的相关文章

QT程序在windows下部署发布

转载:http://www.cnblogs.com/Fan_Fan/archive/2010/05/29/1746860.html QT程序在windows下部署发布 以下包括了部分网上收集的,以及qt帮助里的内容(Deploying an Application on Qt/Windows) 首先,打开windows控制台,然后,找到vs安装目录下的bin里,执行 vcvars32.bat 这个脚本.执行完之后,vs需要的所有环境变量就已经设置好了. 我的环境是QT 4.3.3 + mingw

Mac平台下的Qt程序在Windows下执行编译运行出现的中文乱码问题

Mac平台下的Qt程序在Windows下执行编译运行时,QString::asprintf()部分会出现的中文乱码问题,之前已经使用QStringLiteral宏解决了一个中文乱码问题: 但是此种情形单凭QStringLiteral宏解决不了. 原因: mac下采用MinGW编译,在Windows下可能是MinGW,也可能是MSV2017等VS编译器编译.如果win平台下是MinGW编译,在mac下写好的程序在win平台下运行不会出现乱码: 如果win下是MSV2017编译就会出现中文乱码,需要

Qt程序在Windows上发布

最近写好了一个Qt5的小程序,并且已经配置好了所有的依赖库,需要发布. 这个主要是讲发布的 查找依赖库请看我的另一篇博客 Qt的程序在其他电脑上使用 http://blog.csdn.net/homechao/article/details/9113531 因为所有的文件比较大约70M左右,直接复制比较慢,也容易丢失文件 在网上看了很多使用第三方的软件进行打包,倒也是可以使用就是比较麻烦点 其实Windows上都已经有现成的打包软件啦,大家可能天天用,都没想到吧 那就是RAR,用起来非常简单,我

设置Qt程序在Windows开机后自动运行

(转自:http://blog.csdn.net/weiren2006/article/details/7443362) 让软件在系统启动时自动运行,可通过修改注册表实现. 在\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run中添加需启动的程序路径,代码如下: voidautoStart(boolflag){//写入注册表,开机自启动HKEYhKey;//找到系统的启动项LPCTSTRlpRun=(wchar_t*)

golang编译的程序在windows下不显示黑框

如题,一个编译参数,备忘: -ldflags="-H windowsgui" 别的平台不适用 golang编译的程序在windows下不显示黑框,布布扣,bubuko.com

解决Qt程序在Linux下无法输入中文的办法

一位网友问我如何在Linux的Qt的应用程序中输入中文,我一开始觉得不是什么问题,但是后面自己尝试了一下还真不行.不仅是Qt制作的应用程序,就连Qt Creator都无法支持.后面看了一些资料,了解了Qt应用程序的方法,这里和大家分享一下. 写一个bash脚本,内容如下: #!/bin/sh cd YourBinaryDirectory export QT_IM_MODULE=iBus ./YourProjectBinary 如果想让Qt Creator也能输入中文,那么可以这么写: #!/bi

记事本中写c/c++程序在Windows下执行

 1.在桌面新建一个1.c,内容如下: 2.打开cmd命令行窗口,进入CodeBlock安装目录下的:E:\Installed\CodeBlocks\MinGW,然后执行mingwvars.bat 3.进入1.c所在的目录: 4.执行编译等动作 5.接着使用VC的编译器进行执行代码. 6.点击VS2013开发人员命令提示,然后进入1.c所在目录,执行1.c,执行后的效果如下: 执行在命令中输入: 1,这时候同样会出现和上面相同的效果. 记事本中写c/c++程序在Windows下执行

一些遇到的Qt程序在Windows平台间移植问题整理

今天尝试把Qt程序移植到各种虚拟机中测试,由于Qt的依赖库报告往往不能显示出全部依赖库.结果频频出现问题,好不容易全部解决了,这里给出一些套路. 首先对于Qt版本,我用过很多,最终表示现阶段推荐MingGW的版本(此版自带MingGW),官网链接: Qt 5.4.2 for Windows 32-bit (MinGW 4.9.1, 852 MB) (info) 我个人百度网盘链接:Qt 5.4.2 MinGW 安装时要注意勾选上MinGW ,如果你没有的话.此版本可以在WindowsXP下运行.

C++应用程序在Windows下的编译、链接(二)COFF/PE文件结构

2.1概述 在windows操作系统下,可执行文件的存储格式是PE格式:在Linux操作系统下,可执行文件的存储格式的WLF格式.它们都是COFF格式文件的变种,都是从COFF格式的文件演化而来的. 在windows平台下,目标文件(.obj),静态库文件(.lib)使用COFF格式存储:而可执行文件(.exe),动态链接库文件(.dll)使用PE格式存储.静态库文件其实就是一堆目标文件的集合. 在“WinNT.h”头文件中定义了COFF格式文件,以及PE格式文件的数据结构.这些定义是一系列的结