1、Qt之打包发布(NSIS详解)

发布方式  


    Qt发布的时候,通常使用两种方式:

   (1)静态编译



   (2)动态编译

  



  



    静态发布虽然不需要较多的dll,发布简单、方便,但是往往会牵扯到授权问题(详情请查看Qt  LGPL授权),动态发布则可以避免。。。如果附带了Qt的dll,就相当于发布了Qt的dll,而这些库是属于Qt的,这足以保证使用者知道程序使用了LGPL版本的Qt(这部分还有待探讨)。





查找依赖项



1、检测可执行程序依赖模块



  



  



QT Android 打包名 qt打包发布_打包


    





2、常用依赖库



(1)Qt模块库



  



  



  



(2)ICU依赖库



  



  



  



(3)EGL依赖库



  



  



(4)插件库(Qt安装目录下即可找到D:\Software\Qt\Qt5.1.0\5.1.0\msvc2010\plugins\platforms)



  



  



  



  



     注意:查找对应的插件文件夹,粘贴到安装目录(一定要保持目录结构,例如“ platforms/***.dll”),详细结构见打包发布准备的文件组织结构。    



(5)VS运行时库(在VS安装目录下即可找到D:\Software\Microsoft Visual Studio\VC\redist)



  



  





  发布程序的时候注意版本(Debug/Release)



  



  



    



  



    

QT Android 打包名 qt打包发布_打包_02





关于NSIS



1、NSIS简介



(1)NSIS是什么?



  



(2)NSIS有什么特点?



  





2、工具



  





3、使用方式



  





准备文件



    以下是我即将打包的所有文件,安装包目录结构(包括:可执行程序、 插件库、运行时库、授权文件、卸载程序图标等等!)如下图所示:



QT Android 打包名 qt打包发布_发布_03


1、利用向导制作安装包:

QT Android 打包名 qt打包发布_QT Android 打包名_04





2、填写应用程序基本信息





QT Android 打包名 qt打包发布_方法_05





3、指定安装程序所用选项



     注意:这里选择语言为SimpChinese



QT Android 打包名 qt打包发布_方法_06





4、设置应用程序安装目录与授权文件





QT Android 打包名 qt打包发布_方法_07





5、指定应用程序文件





QT Android 打包名 qt打包发布_方法_08





6、指定创建应用程序图标





QT Android 打包名 qt打包发布_方法_09





7、选择安装程序完成后运行的动作





QT Android 打包名 qt打包发布_Qt_10





8、指定接触安装程序属性





QT Android 打包名 qt打包发布_发布_11





9、进行脚本编译、保存





QT Android 打包名 qt打包发布_打包_12





10、等待编译完成,即可运行打包后的安装包



QT Android 打包名 qt打包发布_打包_13





  





(1)安装程序





QT Android 打包名 qt打包发布_Qt_14





(2)此处显示授权文件中的内容





QT Android 打包名 qt打包发布_Qt_15





(3)选择安装目录





QT Android 打包名 qt打包发布_发布_16





(4)运行程序,并显示“自述文件”





QT Android 打包名 qt打包发布_Qt_17





(5)运行结果





QT Android 打包名 qt打包发布_Qt_18




  








===============================================================


将Qt 动态链接生成的exe及依赖dll打包方法


Qt静态

编译链接生成的exe文件,不需依赖一堆dll,可以独立运行,发布很方便。但绝大多数用的都是Qt开源版本,如果用静态链接,会有些限制。那有 没有办法即能享受静态编译的方便,又不受开源许可的限制呢?方法之一,就是用动态编译,然后把exe和需要的dll整合成一个 文件, 问题就解决了。



具体步骤:


一,先动态编译链接,生成exe文件


二,找到依赖的dll文件


这里,我们可以用Process Explore来获取所依赖的dll文件,还可以用工具depends(很好用)、process explore(Qt5)等。


下载:

http://pan.baidu.com/share/link?shareid=1820917417&uk=673227135


打开procexp.exe,通过菜单View==》Lower Pane View==》DLLs  勾选,显示dll窗口


QT Android 打包名 qt打包发布_QT Android 打包名_19





这里,我们以test.exe为例,在

Qt环境下,将exe运行起来,在ProcessExplor中,找到就可以找到test.exe,选中,在下面就看到依赖的dll了。

QT Android 打包名 qt打包发布_Qt_20



系统目录下的,一般不用关心,按Path排序,看Qt目录及mingw目录下的,将这些dll拷贝出来,单独放到一个目录下。




三,打包


打包工具,这里选用Enigma Virtual Box,


下载:

http://pan.baidu.com/share/link?shareid=1837762045&uk=673227135


安装,运行


QT Android 打包名 qt打包发布_发布_21



Enter Input File Name中,选择exe


Enter Output File Name,输出文件名称


点Add按钮,将前面准备好的dll文件,添加进来


点Files Options,勾选Enable Files Virtualization和Compress files,OK


最后,点Process,大告成。

打包生成的exe文件也可以象静态编译的一样,可以独立运行了。

QT Android 打包名 qt打包发布_Qt_22