问题描述
vs调试时报错:应用程序无法正常启动(0x000007b)。请单击“确定”关闭应用程序
原因分析:
大多数情况不是缺少dll,而是你的dll位数和你项目使用的位数不符造成的。
如你的项目使用Debug x64,但是这个dll却是个32位的,就会报这个错。(当然像opengl32.dll,只有32位,那肯定不是它的问题)
排查方法:
1、定位到是哪个dll的问题。
vs在启动调试时在控制台会输出当前项目加载了哪个dll,你只需从下往上依次排查即可。一般情况下都是最后一个,因为dll作为动态链接库是在exe运行时才加载,所以一旦出现此报错,基本就是最后加载的那个dll出现了问题。如下图最后一个,这个dll可能就是32位的、
2、查看dll到底是不是32位
打开VS的Developer Command Prompt
cd到dll所在的文件夹,然后输入:
dumpbin/headers xxx.dll
看一看到该dll到底是32位(x86)还是64位(x64),如果是x86,那你用VS的debug x64模式运行程序就会提示程序无法运行。
解决方案
分两种情况:
1、你有该dll源码
可以重新使用64位进行编译,将编译好的dll进行替换即可,此处不再赘述。
2、没有该dll的源码
如果是vs自带的dll、windows自带的dll或一些框架自带的dll,一般都会有x86和x64版本,将其替换成你需要的位数的dll即可。例如下图,我要使用红框内的dll,它原先是x86版本的,用起来会报错,但是我将红框内的dll替换成绿框内的x64版本,则程序可以正常运行。