#qt打包# #缺少dll# #无法正常运行# #MSVC2019依赖库#
用QT6.6开发windows客户端软件(exe),发现可执行程序的打包是个容易出现问题的点,要么打包之后放到其它电脑上不可运行,要么执行的时候出现系统错误:应用程序无法正常启动(0xc000007b)。
qt6的打包方法有所变化,主要是变成了windeployqt6,注意跟5以前的版本还是有区别的,多了一个6的标识,windeployqt命令也依然可以使用,但有时候会造成错误。
首先,如果使用了MSVC2019的编译,那么就更容易出现打包不全的现象,执行windeployqt6命令的时候,看上去增加了一堆链接库,以为可以正常独立运行了,而且在开发的电脑上测试是ok的,但是一旦移植到别的电脑上就不行了。主要是MSVC的几个链接库,没能正常打包。
如果使用了MSVC2019的链接库,最典型的就是WebEngine,因为mingw编译不支持这个组件,如果需要客户端和浏览器交互编程,就肯定使用webengine了,那就需要msvc2019的链接库。经过测试,正确的做法如下:
1. 先确保注册了MSVC2019的环境变量,如此是为了保证在MSVC2019的命令行时能自动找到其库目录。
注册的环境变量就是MSVC2019的VC目录(安装目录下),变量名是VCINSTALLDIR。在path中将其置前。
2. 在windows搜索中输入QT6,查找命令行工具(注意,此工具不同于cmd的通用命令行)
3. 点击命令行进入,切换到exe所在的目录,注意最好是release版本
4. 输入命令行 windeployqt6 XXX.exe --release
5. 注意观察 msvc的库是否已经包含,是否有错误。
正常的情况下,即可正常运行。当然如果出现了32位的库文件用在了64位的exe或者64位的库用在了32位的库,都会出现应用程序无法正常启动。
一定要注意检查qt的工程下,是32位还是64位,需要与命令行一致。
错了就重复多做几遍即可。