用VS2017编译运行VC++代码,代码为MFC对话框程序,编译成功,但运行报错:应用程序无法正常启动(0x0000007b)。请单击“确定”关闭应用程序,如下图:

该错误,无法通过单步跟踪进行调试定位,输出信息中也找不到有用的提示。
从网上搜索相关问题的资料,了解到:
- 1、出现0xc000007b——应用程序无法正常启动 其根本原因是缺乏所需要的DLL,提供了错误版本的dll相当于没有DLL,提示完全一样
- 2、网上有人说缺乏dx运行环境,如果属实,也是因为缺乏dx相关的dll 所以根本原因,在低一点
- 3、与程序是32还是64位没有直接关系,但是与你的程序对应不上的dll版本,往往很难发现问题,要引起注意
- 4、网上的资料,太粗糙了,流于表面,大家要有分辨能力。
- 5、发布的时候,需要vc或mfc环境,到你的开发工具的目录的redist目录去找就可以,取系统目录找就不对了
所以,以后碰到这个错误,就不需要茫然了,肯定是缺乏dll或者dll版本不对。
我的工程是从VS2013升级到VS2017平台,代码没有改动,输出路径下的DLL文件也没有增删改过,只是重新编译了一遍主程序,就开始出现这个错误。我根据以上信息,把DLL重新找了一份覆盖到软件目录下,还是不行。
我怀疑是开发平台变化导致的,就找出了之前用VS2013发布过的,备份的,确定以前能正常运行的软件包,运行同样报错。这时,我开始怀疑,是不是操作系统发生了什么变动,要不然,之前能运行的软件,现在也不能运行了,肯定不是软件目录下的DLL的问题,也不是VS2017的问题。
由于工程中用到了postgresql,我又开始怀疑,是不是和它相关,又搜索“vs2017 postgresql 0x0000007b”,找到一篇文章,里面介绍如何在vs2017中部署postgresql开发配置环境,提到一句:
打开PostgreSQL安装目录。
将“bin”文件夹中的“libeay32.dll”、“libiconv-2.dll”、“libintl-8.dll”、“libpq.dll”、“ssleay32.dll”复制到项目目录。
我按照这句话,去我的软件目录下对比了一下,发现少了libeay32.dll这个文件。
libeay32.dll是OpenSSL所用动态链接库,一般与ssleay32.dll同时用到,通常情况下是在程序包里自带的。大小0.22 Mb。
如果缺失此文件,则是程序本身打包存在问题,这种情况可以去网上搜并下载“libeay32.dll”与“ssleay32.dll”放入报错的应用目录里,即可解决问题。由于此库的版本较多,可能需要一定的尝试。
来自百度百科
我把libeay32.dll拷贝到软件目录下,再次启动软件,可以正常运行了。哦耶!!!!
还有一个疑问,就是我之前的版本原来都能好好运行的,为什么突然都不行了呢?以前没有这个libeay32.dll文件,为什么也能运行?
带着这个疑问,我打开c:\\windows\\system32,在里面搜索libeay32.dll,没有找到该文件。
我基本确定了原因:以前c:\\windows\\system32里存在libeay32.dll,所以不需要软件目录下存在libeay32.dll就能运行。后期,由于某些原因(误删除、卸载软件)等原因,将c:\\windows\\system32里存在的libeay32.dll删掉了,所以软件找不到libeay32.dll,就报错了。
网络上关于应用程序无法正常启动(0x0000007b)。请单击“确定”关闭应用程序的解释是对的,的确是由于缺失dll文件,或者dll文件版本不对导致的。但缺失是什么原因导致的,就需要根据自己情况多想想,多分析了。
暂无评论内容