编写的一个桌面程序,在之前的win10、win7都能够正常运行,但是最近有部署win11的需求,反复测试都不能正确运行。
于是开始分析整个流程:1.先使用qcreator新建一个widget程序,可以正常运行,表示qt c++ 部分是没有问题的。2.然后使用qcreator新建一个quick程序,可以正常运行,表示qt qml部分是没有问题的,再此已经排除语言及IDE的问题。
接着排除自己源码中的问题:1.先删除所有的第三方库调用部分,城区可以正常启动,可以确定问题出现再第三方库的调用上。2.分别删除各第三方库, 我的运气比较好,第一个删除后,程序就可以正常启动了, 更好的是删除的库是目前还没有用的库,是一个备用的型号驱动。3.编译,打包。
本以为到此问题已经解决,但是当我双击exe打算运行的时候,悲剧了!!!竟然还是不能运行。这个时候的现象就是在IDE中可以正常运行,但是单独exe搭配deploy部署的程序不能运行。
于是开始了各种找问题,因为之前的程序主要是使用的widget,现在改成了qml,这里首先怀疑qml的库是不是没有部署完。查看deploy的配置命令:
C:\Qt\Qt5.14.2\5.14.2\mingw73_32\bin\windeployqt.exe .\packages\com.tester.root\data
可以看到,目前的部署命令是没有qml相关的。我们需要加上qml相关的目录信息。
C:\Qt\Qt5.14.2\5.14.2\mingw73_32\bin\windeployqt.exe .\packages\com.tester.root\data -qmldir C:\Qt\Qt5.14.2\5.14.2\mingw73_32\qml
自动部署完之后,手动复制我们调用的第三方库,双击exe运行,程序还是不能运行,之后反复查询用各种工具,也不能查到原因。最后在qcreator中看到有dll加载的日志,于是手动一条一条的扒日志,最终落在了C:\Qt\Qt5.14.2\5.14.2\mingw73_32\qml\qt\labs\platform目录中。运行的过程中,发现platform中有dll调用的记录,但是查询deploy自动部署的dll中,缺少该dll目录,于是手动复制程序目录下的qt\labs\platform目录。重新运行程序发现程序终于可以正常运行了 。
虽然说这是一个很小的问题,但是解决的过程也用了我将近8个小时,也是相当长的时间了。
发表回复