windows系统下QT打包后到不同系统的各种报错问题分析

最近碰到好多人问关于WINDOWS上的QT打包后在自己电脑上可以运行,换台电脑报各种错误的问题。于是特地写个帖子总结下一些问题:

首先是打包QT,将QT的系统库拉出来。
这里可以借用windeployqt工具。
打包参考(其他平台打包也可以用对应平台的这个工具):
https://blog.csdn.net/DFSAE/article/details/78615121

他是QT目录下的工具,但他会把对应的QT相关的库文件都拉过来。所以也要注意工具拉的位数,比如我用msvc2017_64\bin和msvc2017_32\bin下的windeployqt.exe打包出来库的位数是不一样的,不过32位的库可以跑在64位上。

其实后面很多报错都是出在系统位数上。

错误1:在这里插入图片描述

报错:

无法启动此程序,因为计算机中丢失MSVCR120.dll。尝试重新安装台程序已解决此问题。

错误2:

报错:

无法启动此程序,因为计算机中丢失vcruntimexxx.dll。尝试重新安装台程序已解决此问题。

原因:

其实这两个错误的本质是一样的。都是VC相关的库,和软件用VS编译有关的库,对应的版本也不一样。应该是要部署的机子上的这个库被阉割了或者丢失了这样的。

解决方法:

所以解决方法也很简单,从有着库的电脑上把这几个文件放到exe的文件夹上。因为库的加载路径默认是加载当前目录的优先级要大于系统库路径的。但是这里可能要注意一个问题,一定要看清楚对应系统的位数。特别是64位拉64位电脑,要从C:\Windows\System32中拉取,千万不要从C:\Windows\SysWOW64中拉取。因为C:\Windows\SysWOW64目录中其实是32位的。(所以过32位部署机的运行库可以从这里拉)。不然错误就成了和错误3一样。

错误3:

在这里插入图片描述

报错:

应用程序无法正常启动(0xc000007b)。请单击“确认”关闭应用程序。

解决方法:

其实这个顺手用“X度”一搜还是挺坑人了。出来的都告诉你是directx坏了????而且内容都是你抄他的他抄你的,浪费时间且不一定能解决问题。后来用gxxgle搜就靠谱多了,很快就理顺了思路。

这里给推荐一个碰到这个问题的方法。其实不一定是QT打包的问题,其他写好的代码除了这个问题我觉得应该也可以用这个方式。
这里借助一个工具叫dependy walker。虽然有点慢,但是是一个非常优秀的工具。
下载地址:

http://www.dependencywalker.com/

使用工具:

我这个exe文件依赖一个libmysql.dll的库 ,正常情况下能正常运行。但这里我为了测试随便找了个库来替代libmysql.dll,但我电脑里其他目录里没有装libmysql.dll。然后运行报了和错。
在这里插入图片描述

然后用软件打开就会发现
在这里插入图片描述
区域1里的libmysql.dll已经变红了,点击后在2区域发现函数都找不到入口了,3区域其实也可以说明一定程度的问题。

为啥说这个工具好用呢?就拿前面的0xc000007b的问题举例。如果某个库位数不对,则在CPU那里可以看到位数,就能定位到是哪个库的问题,而不是一味只知道有个库除了问题。这个工具的功能应该还是有很多的。这里就不详细了。

但你会发现在3区域的上方依旧会有很多API-MS-WIN打头的文件找不到。
这个库为什么会找不到很奇怪,但这几个库system32肯定是有的。只有在我裁剪过的windows系统才有这个的报错。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值