事情经过:
本人一只acmer,使用sublime编写代码,但是前两天在打开cpp类型的文件的时候显示报错如下:
这里的dll文件就是动态链接库,它并不是一个可执行文件,里面存放的是程序的函数实现过程(公用),当程序想要执行某个函数的时候,就要先载入dll文件,然后调出对应的函数地址再调用函数
上网搜了一下,大部分文章对该问题的解释是:
1.用户误操作删除了对应的dll文件
2.电脑中毒,杀毒软件无脑强制删除了一部分相关文件
3.该dll文件本身有一定问题(安装,更新时由于断电,关机等引起)
上述情况有对应的解决方法,可以自行百度(文章应该还是很多的
本人尝试过的操作包括但不限于:
重装sublime
重装clang
电脑全盘查杀
调整/添加clang文件的系统,用户路径(划重点,后面要考
用别人的两个对应dll文件替换掉原本的文件
。。。
均以失败告终
解决:
这时候我们来回顾一下dll文件的作用:负责为程序调用函数提供方便,
百度了一下可执行文件在运行时寻找和调用dll文件的路径搜索顺序。一般是:
1 可执行文件所在目录;
2 进程当前目录;
3 系统目录,%SystemRoot%/system32
4 16位系统目录;,%SystemRoot%/system
5 Windows目录,%SystemRoot%/
6 系统/环境变量PATH中的目录;
如果大家有类似的问题,可以按照这个顺序去一一检查一下对应路径下是否存在其它的可疑dll文件。
本人搜索了一下clang.dll
发现anaconda里面也有一个clang.cll文件,然后又查了一下libLLVM-16.dll文件,果然,anaconda里面也有。马上又在系统变量里面查了一眼,果然,anaconda在mingw64上面...(所以之前调路径是调了个寂寞,只是做了个样子)
那么问题就解决了。系统在搜索.dll文件的时候,先在anaconda的子目录下找到了clang.dll等两个文件,因此调用了错误的文件,也就没有找到对应函数的地址。
那么调一下顺序就好了。
然后因为系统调用的优先级是系统变量>环境变量,如果anaconda放在环境变量里,自然是不会有事的。
后记:
真的不希望离谱事件这个系列文章会有第三讲。。。