XMuli / ChineseChess

Cross-platform and online battle platform game based on Qt: Chinese Chess. Also known as:『Xiangqi』『中国象棋』
https://www.bilibili.com/video/av45509758
GNU General Public License v3.0
718 stars 189 forks source link

在Windows系统下,release后生成的exe文件双击运行,出现应用程序错误怎么办? #22

Closed Binwww closed 3 years ago

Binwww commented 3 years ago

image 提示为:应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序。 自己瞎搞了半天,还是没有解决问题,请问有什么解决办法吗?

XMuli commented 3 years ago

你创建一个空的 Qt Gui 项目,测试能否运行成功?


 应用程序无法正常启动0xc000007b原因

  在开始分享应用程序无法正常启动0xc000007b解决办法之前,我们先来了解下出现这种问题的原因,这里小编总结了一下,造成应用程序无法正常启动0xc000007b的原因,一共有以下三种可能:

  1、电脑没有安装DirectX9或者DirectX 9.0 组件损坏;

  2、电脑没有安装Microsoft Visual C++

  3、电脑上没有安装.net

Binwww commented 3 years ago

DirectX9以及.net我不是很清楚,我电脑上是有Microsoft Visual C++的. 在两个月前,我在Visual Studio 2019上,使用Qt+C++编了一个图像处理的小程序,当时是可以运行的,但是我当时并没有尝试打包的操作。 在多次打包本项目失败后,我尝试打包了Qt的自带例程Chart Themes Example,这个打包成功了,打包后的文件在没有QT的电脑上成功运行了。 但是本项目我还是没有成功,在查询了一些解决方案后,我将QT的环境变量放在了我的环境变量的第一个,奇迹出现了,在QT中release后的文件夹中,生成的exe文件我直接双击,就可以运行,而且我无论将这个exe文件单独放到哪里,他居然都可以运行!但是同时也出现了一个最让我疑惑不解的问题:

  1. 将这个exe文件放到一个单独的文件夹中,使用windeployqt进行打包,然后打包后的exe就不能运行了!
  2. 在打包后文件夹中,单独新建一个文件夹,将exe文件放在这个文件夹中,它又能运行了,但只要放在打包的相同的文件目录下,就无法运行!
  3. 而本项目打包后的文件夹复制到其他没有QT的电脑,它提示没有找到什么动态依赖。 搞了好久,快崩溃了!
XMuli commented 3 years ago

我将QT的环境变量放在了我的环境变量的第一个,奇迹出现了,在QT中release后的文件夹中,生成的exe文件我直接双击,就可以运行,而且我无论将这个exe文件单独放到哪里,他居然都可以运行!但是同时也出现了一个最让我疑惑不解的问题:

是会有查找依赖的路径的优先顺序的,大致顺序类似于linux, image

Qt Path 放在第一个回优先找到,并且被系统使用,就不再往后寻找了。

而本项目打包后的文件夹复制到其他没有QT的电脑,它提示没有找到什么动态依赖。搞了好久,快崩溃了!

可以的对比下按之前的https://blog.csdn.net/qq_33154343/article/details/96448388, 看看和你有什么不一样的步骤?

可以虚拟机安装一个win10镜像,将 windeployqt 进行打包后,丢进去运行试试看,提示缺少什么就复制什么 *.dll; 看看 depends.exe 工具也可会显示缺少了哪些依赖库。

--------------->

正确解决:坑爹的0xc000007b——应用程序无法正常启动

(1)根本原因是缺乏所需要的 DLL,提供了错误版本的 dll 相当于没有 DLL, 提示完全一样。

(2)网上有人说缺乏 dx 运行环境,如果属实,也是因为缺乏 dx 相关的 dll。

(3)与程序是 32 还是 64 位没有直接关系,但是与你的程序对应不上的 dll 版本,往往很难发现问题,要引起注意。

(4)生成的 debug 目录下,运行 exe 文件报改错,将缺少的 dll 文件添加进来即可解决,例如 opencv_world411d.dll。