Qt应用程序的发布有两种方式:
静态链接发布
- 是指Qt编译应用程序时,将Qt的运行库等所需的支持文件全部静态编译到应用程序里,生成一个独立的可执行文件,应用程序发布只需很少的几个文件
- 缺点:应用程序可执行文件很大,缺少灵活性。例如:当应用程序需要更新,或Qt有更新时,需要重新编译应用程序后发再发布。而且,静态链接方式不能部署插件
共享库方式发布
- 是指按正常方式编译生成应用程序,将应用程序运行所需的各种共享库与应用程序一同发布给用户。这样,当Qt的运行库更新时可以单独更新Qt运行库,应用程序如果使用了插件(插件是以共享库形式存在的),也可以单独更新插件,这为应用程序更新提供了方便
- 静态链接发布应用程序,还需要将Qt以静态方式重新编译生成静态版本的Qt,然后用静态版本的Qt编译和链接应用程序,才可以生成静态链接的应用程序,这个过程很费事,所以,一般应用程序发布都采用共享库的方式
①Windows发布工具
- windeployqt.exe是Qt自带的Windows平台发布工具,它可以自动为一个应用程序复制其运行所需的各种库文件、插件和翻译文件
- 在Windows平台下,windeployqt会将编译器的运行时文件复制到发布目录下,如果是使用MSVC编译的,就包含visual C++运行库
- 所在路径:windeployqt.exe在Qt的bin目录下,并且每个编译器版本均有一个独立的目录,所以若你的Qt中有多个编译器,就会有多个windeployqt.exe(备注:应用程序由哪个编译器生成,就要使用哪个windeployqt生成发布文件)
- cmd命令行使用windeployqt:格式如下(options是一些选项,files是需要发布生成文件的应用程序文件名),要在cmd命令行使用windeployqt,最好的方式是将windeployqt版本所在的bin路径添加到系统的PATH环境变量里
②MinGW编译的应用程序发布实例
- 第一步:将想要发布的应用程序,使用MinGW编译器在release模式下编译,然后生成可执行文件
- 第二步:在任意地址新建一个目录,此处我们新建为“F:\Setup\minGW”,然后将TCPServer.exe复制到这个目录下
- 第三步:将MinGW编译器的bin路径添加到系统的PATH环境变量中
- 第四步:进入cmd命令行,输入以下执行
F: cd Setup\minGW windeployqt TCPServer.exe
- 第五步:执行完成之后,windeployqt将TCPServer.exe运行时需要的各种库文件都复制到目录“F:\Setup\minGW”中了,如下图
点击这个.exe就可以直接运行了
- 第六步:测试依赖库是否复制完全。将刚才添加到PATH中的环境变量删除,然后再去运行目录下的TCPServer.exe文件。如果运行时出错,提示丢失“xxx.dll”或丢失“xxx文件”,就说明windeployqt没有一次将所有的依赖文件复制完全,还需要自己手动导入一些文件,那么此时就在“D:\Qt\Qt5.9.5\5.9.5\mingw53_32\bin”目录下寻找缺少的“xxx.dll”或“xxx文件”,然后复制到“F:\Setup\minGW”目录下,点击.exe文件查看是否还能运行正常;如果没有缺失文件那么就不需要做这些事情
即使在开发应用程序的计算机上测试发布程序没有问题,也应该将发布文件目录复制到一个没有安装Qt的计算机上测试最好
Dependency Walker软件:查看一个可执行文件的依赖文件,也可以使用这个软件,它能可视化地查看可执行文件的依赖项,可以从官网下载
③MSVC编译的应用程序发布实例
- 第一步:将想要发布的应用程序,使用MSVC2015 64bit编译器在release模式下编译,然后生成可执行文件
- 第二步:在任意地址新建一个目录,此处我们新建为“F:\Setup\msvc64”,然后将TCPServer.exe复制到这个目录下
- 第三步:将MSVC2015 64bit编译器的bin路径添加到系统的PATH环境变量中
- 第四步:进入cmd命令行,输入以下执行
F: cd Setup\msvc64 windeployqt TCPServer.exe
- 第五步:执行完成之后,windeployqt将TCPServer.exe运行时需要的各种库文件都复制到目录“F:\Setup\msvc64”中了,如下图
点击这个.exe就可以直接运行了
- 第六步:测试依赖库是否复制完全。与MinGW测试方法相同,见上方
④安装程序制作
- 复制应用程序所需的依赖文件,并测试没有问题后就可以制作安装文件了。有很多制作安装文件的软件,百度搜索制作即可