离谱事件&解决方法2 无法定位程序输入点XXX于动态链接库XXX.dll

事情经过:

本人一只acmer,使用sublime编写代码,但是前两天在打开cpp类型的文件的时候显示报错如下:

离谱事件&解决方法2 无法定位程序输入点XXX于动态链接库XXX.dll_第1张图片

 

离谱事件&解决方法2 无法定位程序输入点XXX于动态链接库XXX.dll_第2张图片

这里的dll文件就是动态链接库,它并不是一个可执行文件,里面存放的是程序的函数实现过程(公用),当程序想要执行某个函数的时候,就要先载入dll文件,然后调出对应的函数地址再调用函数 

上网搜了一下,大部分文章对该问题的解释是:

1.用户误操作删除了对应的dll文件

2.电脑中毒,杀毒软件无脑强制删除了一部分相关文件

3.该dll文件本身有一定问题(安装,更新时由于断电,关机等引起)

上述情况有对应的解决方法,可以自行百度(文章应该还是很多的 

本人尝试过的操作包括但不限于:

重装sublime

重装clang

电脑全盘查杀

调整/添加clang文件的系统,用户路径(划重点,后面要考

用别人的两个对应dll文件替换掉原本的文件

。。。

均以失败告终

离谱事件&解决方法2 无法定位程序输入点XXX于动态链接库XXX.dll_第3张图片


解决: 

这时候我们来回顾一下dll文件的作用:负责为程序调用函数提供方便,

百度了一下可执行文件在运行时寻找和调用dll文件的路径搜索顺序。一般是:

1 可执行文件所在目录;
2 进程当前目录;
3 系统目录,%SystemRoot%/system32
4 16位系统目录;,%SystemRoot%/system
5 Windows目录,%SystemRoot%/
6 系统/环境变量PATH中的目录;

如果大家有类似的问题,可以按照这个顺序去一一检查一下对应路径下是否存在其它的可疑dll文件。

本人搜索了一下clang.dll 

离谱事件&解决方法2 无法定位程序输入点XXX于动态链接库XXX.dll_第4张图片

发现anaconda里面也有一个clang.cll文件,然后又查了一下libLLVM-16.dll文件,果然,anaconda里面也有。马上又在系统变量里面查了一眼,果然,anaconda在mingw64上面...(所以之前调路径是调了个寂寞,只是做了个样子)

那么问题就解决了。系统在搜索.dll文件的时候,先在anaconda的子目录下找到了clang.dll等两个文件,因此调用了错误的文件,也就没有找到对应函数的地址。

那么调一下顺序就好了。

然后因为系统调用的优先级是系统变量>环境变量,如果anaconda放在环境变量里,自然是不会有事的。

后记:

真的不希望离谱事件这个系列文章会有第三讲。。。

你可能感兴趣的:(离谱事件&解决方法,c++)