「博客搬家」 原地址: CSDN 原发表时间: 2016-06-04

本文讨论在 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>

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

有时程序会提示找不到所需的 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寻找依赖

Dependency Walker寻找依赖

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

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

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

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

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

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

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

最后点击右下角的“执行封包”,生成的 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 发布

Qt 程序在 Windows 下的发布相关推荐

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

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

  2. 基于Qt Creator 的Windows下数字图像处理软件[栏目]

    基于Qt Creator 的Windows下数字图像处理软件[栏目] 前言 设计过程 完整项目展示 前言 之前说准备转行软件开发,准备从C++的学习开始,恰好这学期的数字图像处理需要做一个项目,所以决 ...

  3. installshield打包mysql_实现Installshield对Php+mysql+apache做的程序在WINDOWS下打包

    实现Installshield对Php+mysql+apache做的程序在WINDOWS下打包 undefined undefined用Installshield对Php+mysql+apache做的 ...

  4. installshield mysql_实现Installshield对Php+mysql+apache做的程序在WINDOWS下打包

    实现Installshield对Php+mysql+apache做的程序在WINDOWS下打包 上一篇 / 下一篇  2007-09-30 09:39:59 / 个人分类:For Test 实现Ins ...

  5. Qt学习之Windows下Qt应用程序打包成exe安装包

    本文介绍如何将exe可执行程序打包成exe安装包,打包完的安装包可以直接在Windows下安装,需要用到 Inno Setup 安装程序制作软件工具,工具下载完之后直接安装即可. 工具下载: 打包安装 ...

  6. 基于Linux的Qt项目在windows下发布

    QT在Linux下的界面处理人所共知,现在有个需求是一定要在windows下做界面,时间比较紧.目前已经在Linux下的界面如何port至windows呢? 这里用到QT的跨平台.这种时候使用qt+m ...

  7. qt在windows和linux效率,QT 程序在windows和linux上的打包

    方法:将release方式编译的可执行文件放到一个新建的文件夹中,然后将所有需要的库文件复制到同目录下. 使用ldd查阅需要的库文件. 将所有的库文件复制到当前目录,然后运行. 此处可以写一个脚本. ...

  8. qt程序在Linux下字体乱了,解决linux/Ubuntu下Qt creater 界面程序在编译运行后无法显示中文或中文乱码问题!...

    本文解决的主要是界面程序编译运行后无法显示中文的问题,如果在creater 中无法输入中文,下载个IBus或者搜狗之类的中文输入法即可解决! 首先说乱码问题,这个很好解决: 如果是在linux下打开W ...

  9. QT生成在Windows下有图标的exe文件(IDE=QT Creator)

    原文:http://www.cnblogs.com/davesla/archive/2011/01/17/1937343.html 我个人十分喜爱QT Creator的IDE界面与操作,但是也许是尚未 ...

最新文章

  1. WINDOWS SERVER 2003 AD中的5种操作主机
  2. php 日志处理类,php中自定义日志处理类(类似于java中的log4j)
  3. html5之form表单
  4. mac下用scp命令实现本地文件与服务器Linux文件之间的相互传输
  5. 工作流引擎的五大接口
  6. linux基础知识个人总结
  7. zedboard--zynq使用自带外设IP让ARM PS访问FPGA(八) 转载
  8. 深入浅出讲解LDA主题模型(一)
  9. c语言通讯录整体设计论文,通讯录管理系统的设计与实现
  10. 大公司比较习惯问及的97道问题附答案
  11. OSChina 周二乱弹 ——流川枫与苍井空
  12. WPS安装后显示系统字体找不到
  13. Symbol Type Viewer Version 1.0.0.3 (beta) by Lionel d'Hauenens
  14. [1140]linux查看历史命令history
  15. cwber获取html,qq飞车手游CW、CWW、WCW怎么触发方法
  16. 英语基础知识:非谓语使用规则上篇
  17. 我的第一次黑苹果安装,还挺顺利!!!!
  18. 【论文汇总】人群计数中Transformer的应用,持续更新
  19. f2fs系列文章truncate
  20. 【JavaWeb04】

热门文章

  1. IOS中CoreLocation框架地理定位
  2. hibernate.hbm2ddl.auto的value
  3. GARFIELD@04-09-2005
  4. orb-slam2(学习笔记)+相机
  5. squid,nginx,lighttpd反向代理的区别
  6. Fedora 15 安装与配置一览
  7. 【Qt】Log4Qt(二)使用
  8. Makefile的东西
  9. ppt批量缩略图_拒绝加班系列:100个PPT常用快捷键,让PPT制作快到起飞
  10. linux 雷电接口,Intel完全开放雷电技术:底层融合USB 4