本文讨论在 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
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

  1. QT程序在windows下部署发布

    转载:http://www.cnblogs.com/Fan_Fan/archive/2010/05/29/1746860.html QT程序在windows下部署发布 以下包括了部分网上收集的,以及q ...

  2. 解析 Qt 程序在Windows 下发布

    原文请看:http://www.cnblogs.com/elect-fans/archive/2012/03/15/2408579.html Qt 程序在Windows下发布是本文要介绍的内容,不多说 ...

  3. 关于在windows下部署发布QT程序的总结

    原文请看:http://www.cnblogs.com/javaexam2/archive/2011/05/18/2632916.html 关于在windows下部署发布QT程序的总结 2008-06 ...

  4. 原创 C++应用程序在Windows下的编译、链接:第一部分 概述

    本文是对C++应用程序在Windows下的编译.链接的深入理解和分析,文章的目录如下: 我们先看第一章概述部分. 1概述 1.1编译工具简介 cl.exe是windows平台下的编译器,link.ex ...

  5. C++应用程序在Windows下的编译、链接(一)概述

    C++应用程序在Windows下的编译.链接(一)概述 本文是对C++应用程序在Windows下的编译.链接的深入理解和分析,文章的目录如下: 我们先看第一章概述部分. 1概述 1.1编译工具简介 c ...

  6. django程序在windows服务器上发布

    django程序在windows服务器上发布 参考文献:https://www.cnblogs.com/djangocn/p/10227006.html 1.安装 IIS 和 GCI 打开服务器管理器 ...

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

    解决Qt程序在Linux下无法输入中文的办法 一位网友问我怎样在Linux的Qt的应用程序中输入中文,我一開始认为不是什么问题,可是后面自己尝试了一下还真不行.不仅是Qt制作的应用程序,就连Qt Cr ...

  8. 【Qt开发】解决Qt程序在Linux下无法输入中文的办法

    解决Qt程序在Linux下无法输入中文的办法 一位网友问我如何在Linux的Qt的应用程序中输入中文,我一开始觉得不是什么问题,但是后面自己尝试了一下还真不行.不仅是Qt制作的应用程序,就连Qt Cr ...

  9. QT学习之windows下安装配置PyQt5

    windows下安装配置PyQt5 目录 为什么要学习QT 命令行安装PyQt5以及PyQt5-tools 配置QtDesigner.PyUIC及PyRcc 为什么要学习QT python下与界面开发 ...

随机推荐

  1. eclipsePreferences位置

    1.Windows:菜单栏-Window-Preferences 2.Mac:应用顶部最左侧Eclipse-Preferences ---------------------------------- ...

  2. presentingViewController、presentedViewController区别

    解释两个属性:presentingViewController 和 presentedViewController A----(present)-----B----(present)-----C 1. ...

  3. POJ 3237 树链剖分

    题目链接:http://poj.org/problem?id=3237 题意:给定一棵n个结点n-1条边的树. 每条边都是一个边权. 现在有4种操作 1:CHANGE I V:把(输入的)第i条边的边 ...

  4. office visio project安装

    1.VOL 版和 Retail 零售版的区别 VOL版是大客户版,也叫批量授权版本.VOL版本一个key可以激活指定数量的机器. Retail版即零售版,也就是平时在商店里买的office安装光盘里面 ...

  5. vsftpd配置详解

    匿名用户权限控制: anonymous_enable=YES #是否启用匿名用户 no_anon_password=YES #匿名用户login时不询问口令 anon_upload_enable=(y ...

  6. javascript 回到顶部效果的实现

    demo.js window.onload=function() { var timer=null; var obtn=document.getElementById('btn'); var isTo ...

  7. python-字符串的处理

    s1 = '###12314##231###' print(s1.split('#')) #split,从左往右遇见# 就拆分一次['', '', '', '12314', '', '231', '' ...

  8. PyQt5界面上调用subprocess.Popen会闪命令窗口的问题

    最近再做一个界面开发,主要实现的点击一个按钮,会执行adb安装应用程序的功能,在调试阶段一切都正常,但打包成一个exe安装程序,安装之后运行,点击按钮会闪一下adb的命令窗口 先列出subproces ...

  9. bzoj1002 轮状病毒 暴力打标找规律/基尔霍夫矩阵+高斯消元

    基本思路: 1.先观察规律,写写画画未果 2.写程序暴力打表找规律,找出规律 1-15的答案:1    5    16    45    121 320 841     2205   5776 151 ...

  10. UOJ131 [NOI2015] 品酒大会

    考前挣扎(bu shi 之前留下来的坑 首先注意到 SAM的parent树 是反串的后缀树 也就是原串的前缀树 这个性质很重要 所以说我们在树上统计的时候两个点的lca就是两个后缀串的lcp 于是可以 ...