Qt应用程序发布方式
用Qt 开发一个应用程序后,将应用程序提供 用户在其他计算机上使用就是应用程序的发布。应用程序发布一般会提供一个安装程序,将应用 序的可执行文件及需要的运行库安装到用户计算机上,即使用户计算机上没有安装 Qt 也能正常运行安装的程序。
Qt 的应用程序发布有两种方式:静态链接和共享库方式。
静态链接
静态链接 (Static linking) 是指用 Qt 编译应用程序时,将 Qt 的运行库等所需的支持文件全部 静态编译到应用程序里,生成一个独立的可执行文件, 用程序发布只需很少的几个文件。这种方式的缺点是应用程序可执行文件很大, 缺少灵活性。 例如,当应用程序需要更新,或 Qt 有更新 时,需要重新编译应用程序后再发布。 而且,静态链接方式不能部署插件。
动态链接(共享库)
共享库 (Shared Libraries) 方式是指按正常方式编译生成应用程序,将应用程序运行所需的各种共享库与应用程序一同发布给用户。这样, Qt 的运行库更新时可以单独更新 Qt 运行库, 应用程序如果使用了插件(插件是以共享库形式存在的),也可以单独更新插件,这为应用程序更新提供了方便。
如果要使用静态链接发布应用程 ,还 要将 Qt 以静态方式重新编译生成静态版本的 Qt, 然后用静态版本的 Qt 编译和链接应用程序, 才可以生成静态链接的应用程序。 这个过程很花费时间,也比较麻烦。所以一般应用程序发布都采用动态链接方式。
Windows平台发布应用程序
Qt 是跨平台的开发工具,开发的应用程序可以在各种平台上发布。
windeployqt.exe Qt 自带的 Windows 平台发布工具,它可以自动为应用程序复制其运行所需的各种库文件、插件和翻译文件,生成可发布的目录。
windeployqt.exe 文件在 Qt的安装目录\bin 目录下, Qt 的每一个编译器版本均有独立的目录,如计算机上的 Qt 安装有 minGW32、MSVC2015 32bit、 MSVC2015 64bit 3个编译器版本, Qt 装在 D: \Qt 目录下,则3个版本的 bin 目录是:
D:\Qt\Qt5.13.1\5.13.1\mingw_32\bin
D:\Qt\Qt5.13.1\5.13.1\msvc2015\bin
D:\Qt\Qt5.13.1\5.13.1\msvc2015_64\bin
备注:应用程序由哪个编译器生成的,就应该用哪个版本的 windeployqt 生成发布文件。
在Windows的Command 窗口使用 windeployqt 程序,其语法如下:
windeployqt [opions] [files]
其中 options 是一些选项设置,可以查看 Qt 帮助文件查看具体设置,一般使用缺省设置即可;files 是需要生成发布文件的应用程序文件名(全路径名称)。
要在 命令行窗口使用 windeployqt, 最好的方法是将 windeployqt 版本所在的 bin路径,添加 到系统的 PATH 环境变量中。
在Windows 平台上, windeployqt 会将编译器的运行时的文件复制到发布目录下,如果 MSVC 编译的,就包含 Visual C++的运行库。
场景:使用msvc2017_x64编译、链接生成test.exe,现在需要对此进行发布应用程序。
示例:
1、进入D:\Qt\Qt5.13.1\5.13.1\msvc2017_64\bin目录下,在搜索窗口处输入cmd定位到当前路径。
2、输入指令“windeployqt E:\test\test.exe”
3、在E:\test目录下生成所依赖的动态库文件。执行 windeployqt后将test.exe运行时需要的各种库文件都复制到程序当前目录下。
4、为测试生成的发布目录下的文件是否齐全,可将此拷贝到纯净电脑中,验证其完整性。
windeployqt 并不能保证一次将所有依赖文件复制完全,需要测试运行应用程序以检验依赖库的完整性。