Qt开发:windows下发布动态编译程序

Qt开发发布程序有两种:静态编译和动态编译。

  • 静态编译将所有用到的库及资源文件打包成一个exe执行文件,能保证在不同的机器上都能运行,不依赖于某个运行库。
  • 动态编译只生成一个最小的可执行exe,其他的依赖库dll需要与exe一起打包,这样的好处是体积小,不过在不同的机器上可能会出现丢失dll的问题。

Qt-creator默认情况下是动态编译的,本文只讨论动态编译的情况下发布Qt开发的程序。


生成release版的exe

用IDE编译生成自己建立的工程的exe执行文件。


检查依赖库

将生成的exe拷贝到一个干净的windows机器上(最好没安装过vc运行库,没安装过qt),用hap-depends或者process explorer等软件查看exe所缺失的dll。


3 拷贝依赖库

分三种:

(1)Qt相关库,比如程序的pro文件里引入了相关模块,QT+=core gui widgets xml multimedia network printsupport,那么就需要把相对应的Qt模块的dll拷贝到exe同目录下。例如:Qt5Core.dll  Qt5Gui.dll  Qt5Xml.dll  Qt5Multimedia.dll  Qt5Network.dll  Qt5PrintSupport.dll  Qt5Widgets.dll icudt52.dll  icuin52.dll  icuuc52.dll,有时候可能还需要libEGL.dll

(2)VC运行相关库:如果编译器是VC10,11,12等比较先进的运行库,以vc12为例,就需要到system32里面找到对应的msvcp120.dll和msvcr120.dll,并拷贝到exe目录。

(注意:有时候拷贝过去在别人的机器仍然运行报错,解决方法是:到网上下载这几个dll然后覆盖到exe目录)

(3)Qt plugins里面的依赖库,这里面的dll都是为了解决Qt跨平台所要用到的一些基础库,到这一步运行exe还是会报错:

This application failed to start because it could not find or load the Qt platform plugin "windows"

此时不要惊慌。
解决方法是:找到Qt安装目录下的plugins文件夹,将需要用到的第三方库的文件夹整个拷贝到exe根目录(然后可以删掉里面不需要的debug版的dll和pdb文件,节省空间),一般情况下需要platforms(必须的,解决窗口问题)和imageformats(解决图标、图片资源等问题)这两个文件夹。

4 打包成安装包
用exe打包工具对整个程序文件夹打包成安装包。

最后,附上我做的一个小软件最终的程序发布根目录结构,
Qt开发:windows下发布动态编译程序_第1张图片  

你可能感兴趣的:(qt)