【精选】VS2019报错:应用程序无法正常启动(0xc00007b)

您所在的位置:网站首页 无法正常启动程序0xc000007b 【精选】VS2019报错:应用程序无法正常启动(0xc00007b)

【精选】VS2019报错:应用程序无法正常启动(0xc00007b)

2023-11-11 12:19| 来源: 网络整理| 查看: 265

记录一个很蛋疼很蛋疼的问题,搞了两天左右才解决,更蛋疼的是,目前也不是根本性解决。。。

1.问题

从SVN拉下来的项目,原本是VS2017的项目,到我这边因为原本没有安装VS2017,所以从VS2019运行。。。 然而编译是通过了,但是运行报错如下,没有明确的错误信息。。 在这里插入图片描述

2.排查问题

先是从网上去百度了一下,很多文章都说是dll的问题,于是就从dll的方向去排查(然而这是一个很大很大的坑,因为根本不知道哪个dll有问题导致的!!!)

接着,我用depends.exe(关于depends可以参考我的这篇文章:传送门)查看dll依赖情况,发现我的这边没有引用到cpp-redis,如图: 在这里插入图片描述

开始的时候,因为cpp-redis的库和同事那边的不一样(都是从vcpkg下载安装的,但是我这边的是4.3.1-2版本,同事那边是4.3.1版本,而且我安装的是静态库,同事那边是动态库),所以就以为是cpp-redis的问题。然而,cpp-redis解决完cpp-redis后,无法正常启动的问题还是存在。

小插曲:因为vcpkg对库的版本控制做的不是很好,在把我的cpp-redis和同事的cpp-redis安装成同一个版本的时候,也花了好多的时间。(如何安装可以参看附录,感觉这种方式也不是很好,如果有更好的方式欢迎交流)

这时候其实没有什么思路了,期间也下载了VS2017还是不行。于是一边百度一边瞎搞了好久还是没有找到问题。。百度上面有说安装DirectX的,安装了也没有用。。还有很多都说是dll的问题,没办法,只能继续看下depends.exe这边的检测结果。

中间改了一些环境变量,然后重新检测的时候发现如下几个报红的dll(32位的dll所以报红,关于如何查看dll是32/64位,可以参考上面的传送门),于是又着手解决了几个报红的dll,然而问题还是没有解决,于是又深入进去了几层解决了一些报红dll,问题还是没有解决。。

SYSTEM、SYSTEM32和SysWOW64有什么区别?

在32位操作系统的Windows文件夹中,SYSTEM和SYSTEM32两个文件夹,分别用来存放16位和32位的DLL文件。 在64位操作系统的Windows文件夹中,System32和SysWOW64两个文件夹,分别用来存放64位和32位的DLL文件。 WOW64的全称是32bit Windows On 64bit Windows,即运行在64位系统上的32位程序。简单说,就是历史原因。 参考:https://www.huaweicloud.com/articles/fb98246b7a71b2a7ad1ed82fd1339f7e.html

在这里插入图片描述

最后,同事把他那边生成的文件打包发我这边测试又是可以的,看到里面还自带了这两个dll文件。。于是吧这两个文件拷贝到我的生成目录下面,发现问题解决了?!!说实话,问题解决的一瞬间很高兴也有点懵逼。。 于是又试了一下 发现只要把mscvr110.dll拷贝过来就好了。。。 于是又看了一下 C:\Windows\System32\msvcr110.dll,果然是32位的。。。 在这里插入图片描述 在这里插入图片描述

最后,问题虽然是暂时解决了,但内心还是诚惶诚恐,因为完全不知道 为什么我的system32目录下面会有32位的dll??而且更重要的是depends.exe也不能检测出我用了msvcr110.dll。。 所以,万一下次再遇到类似的问题,似乎还是不能快速的解决?? 没有找到比depends.exe 更好用的检测dll依赖的软件,有知道的大佬还烦请告知一下。。

附录:如何安装指定vcpkg的安装版本

vcpkg安装包的时候本质上是从git上面去下载然后编译安装 而每个库要从哪里去下载这些配置都在vcpkg安装目录下的ports的目录里面 所以,比如我想要安装一个和别人一样版本的cpp-redis库,只要把别人的ports/cpp-redis目录拷贝并覆盖下然后在安装就可以 当然,你也可以直接修改配置文件,这里面的配置文件说白了还是git库相关的那些配置。。有兴趣可以研究分享一下~ 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3