Qt开发发布程序有两种:静态编译和动态编译。
- 静态编译将所有用到的库及资源文件打包成一个exe执行文件,能保证在不同的机器上都能运行,不依赖于某个运行库。
- 动态编译只生成一个最小的可执行exe,其他的依赖库dll需要与exe一起打包,这样的好处是体积小,不过在不同的机器上可能会出现丢失dll的问题。
Qt-creator默认情况下是动态编译的,本文只讨论动态编译的情况下发布Qt开发的程序。
1 生成release版的exe
用IDE编译生成自己建立的工程的exe执行文件。
2 检查依赖库
将生成的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还是会报错: