【Debug】VS EXE运行“应用程序无法正常启动(0xc000007b)”

594 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第10天,点击查看活动详情

作者:[柒号华仔]

个人信条:星光不问赶路人,岁月不负有心人。

个人方向:专注于5G领域,同时兼顾其他网络协议,编解码协议,C/C++,linux等,感兴趣的小伙伴可以关注我,一起交流。


问题描述

今天在VS2013发布应用程序后,本地电脑可以正常打开exe,但放到其他电脑无法正常启动,打印“应用无法正常启动(0xc000007b)。请单击“确定”关闭应用程序”。

34d6b8b072fa46ee8eeec9a9d54bf6a4.png​编辑

问题解决思路

这种情况主要还是编译电脑与运行电脑的dll的版本不匹配或者缺少dll文件,实际上缺少dll文件大多会直接提醒找不到的dll文件名,而版本不匹配则不好解决。

解决方法有两种:

  1. 了解编译电脑安装了哪些软件相关软件,比如Qt,vs2013等,在运行电脑上安装相应软件,基本上能解决这个问题。这种方法的前提是编译方与运行方可以进行沟通,但往往难于实现,即使能够交流,安装和搭建环境需要不少花费不少时间。
  2. 将运行电脑上可能不匹配的和缺少的dll文件,从编译电脑放入发布包。这种方法的前提是查找到软件运行需依赖哪些dll文件,以及判断哪些dll可能需要放入。

查找依赖dll文件

  1. 在编译电脑上运行应用程序,打开windows任务管理器->性能,在左下角打开资源管理器

a86b14d524f94683bfbb7e75b971e136.png​编辑

  1. 选择CPU,勾选所关注的应用程序,在下方关联的模块中,可以清晰的看到程序所依赖的dll件,全选后将信息复制到txt,方便后面对照。

aa5c1fc6074d42608bb4c35988d30541.png​编辑

  1. 按照依赖dll文件列表,将可能不匹配或者缺少的dll文件,从系统对应路径拷贝到应用程序目录。这里我拷贝了MSVCP120.dll,msvcp_win.dll,MSVCR120.dll,MSVCR120D.dll,msvcrt.dll几个文件。最保险的是将所有依赖dll都放入,但软件包会比较冗余。

  2. 将新的应用程序软件包放到其他干净的电脑试运行,若成功即可,若不成功可返回去拷贝其他dll文件。

我的程序到这里已运行正常,后面就是打包发布了。