Qt 错误 The process was ended forcefully(无法定位程序输入点 于动态链接库)

0.个人说明

第一次写博客,主要是因为这个问题困扰了一天,算是自己的解决(学习)记录,也希望整理所得,以下很多来自于他人博客与个人猜测,如有错误或侵权,请指出。

1.问题描述

之前我装过QT(好几个版本),之前运行没有问题,但这次出了问题,期间电脑的环境变量不知道为什么改变了(忘记是怎么变的了,主要是少了很多)
QT(5.9.9)新建项目(完全未修改)编译没有问题,执行遇到错误,如下图
在这里插入图片描述
debug调试结果如下:
在这里插入图片描述
在文件夹下直接运行.exe结果如下:
在这里插入图片描述
个人系统环境变量path如下:
在这里插入图片描述

2.解决方案

网上查阅很多,根据debug结果和直接运行.exe结果,结论就是缺少了dll文件,虽然运行结果说的是QT5Cored.dll,网上大部分说的是系统环境变量的问题,有的说是顺序问题(要把mingw53_32\bin放在最前面,说是因为其他的路径可能也包含一些库导致冲突),但是尝试过,没用,最终经过很多尝试,在.exe文件所在目录下加了libstdc+±6.dll就可以了。
在这里插入图片描述
在qt creator中运行也没问题。libstdc+±6.dll来自5.9.9\mingw53_32\bin文件夹,tools\mingw53_32\bin也有也可以(安装QT是Tools里我选了这个选项,用来交叉编译的,不选也问题不大)

3.解决过程

(这一部分主要记录自己走过的坑,如果上面的方法没有效果,希望这一部分对你有启发)

3.1尝试1 修改环境变量

就是把相关的dll所在路径加入系统变量,但是对我没用。具体添加那些看前面的系统变量图。

3.2尝试2 添加Qt5Cored.dll到执行目录

这一尝试主要看缺什么dll,就添加什么,都可以在mingw53_32\bin目录下找到,但是与我而言,无效。

3.3尝试3 Dependency Walker查看.exe依赖的dll

这是看的网上,利用Dependency Walker软件可以查看exe执行所依赖的dll,本想是看看是否缺少其他的dll,但是自己菜,搞了半天没搞懂。不过这个软件不错,有这样一个工具以后也许有用。
软件下载链接:https://www.dependencywalker.com/
简单教程链接:https://www.cnblogs.com/stemon/p/4556583.html

3.4尝试4 利用MinGW命令行windeployqt命令打包编译。

进入mingw命令行
在这里插入图片描述
cd切换到.exe文件的目录下,执行windeployqt test.exe,之后查看这个目录就会发现多了很多。
在这里插入图片描述
然后直接运行test.exe就可以了,在qt creator中运行也没问题了,之后我把这里面的一些dll和文件夹测试了一些(主要是新建一个项目,把这些dll放入新项目,运行exe看能不能运行),最后发现,只需要将libstdc++ -6.dll放入新项目就行了。也查看过pro工程文件,也看过mingw53_32\bin目录,也有这个文件,也把这个目录加入到了path,也试过把这个目录上移到第一条,但是没用。
有人说这是因为mingw的版本太多, 每个MGWIN的\bin\下 有一个libstdc+±6.dll 导致程序不知道该访问那个.dll。

windeployqt命令的具体操作可看此链接:https://blog.csdn.net/weijifen000/article/details/102537640
另:网上还有说换QT的新版本,如5.9换为5.9.9。我试了,对我没用。

4额外

自己在解决问题的过程中也了解到一些其他东西,比如Dependency Walker。除此之外就是dll加载的顺序了,如下
DLL的动态链接有两种方法。
一种是加载时动态链接(Load_time dynamic linking)。Windows搜索要装入的DLL时,按以下顺序:应用程序所在目录→当前目录→Windows SYSTEM目录→Windows目录→PATH环境变量指定的路径。
但是具体还需要考虑安全DLL搜索模式是启用或禁用。
具体内容参考这位大佬的博客。
https://blog.csdn.net/tuhuolong/article/details/5977877

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值