最近发生了一件特别诡异的事,两个月前开发的一台设备,编写的程序平稳运行了一段时间,前几天一个同事打开程序,再次运行,程序忽然挂掉了。经过反复重启,打开备份的压缩程序,换人重启,程序依然无法启动。(win7 32位)
故障现象:运行Pycharm,控制台打印“OSError: [WinError 126] 找不到指定的模块。”
经查,问题出在了一个自己二次封装的dll库:
self.api_xxx = cdll.LoadLibrary(r"./…/xxx.dll")。
然而,经反复比较该dll并将在其他设备上运行良好的dll替换,故障依旧。
尝试一(无效)
经过上网搜索,怀疑python缺少库文件、配置错误或者dll在二次封装时依赖文件之类的。于是进行了如下操作:
1)重装python并将sitepackages内用到的包安装、
2)配置Pycharm的python interpreter
3)对设备安装了VS2010(报错的dll是在其他机器上通过VS2010封装的)
经过以上3个操作,问题丝毫没有进展。
尝试二:放置到python根目录,运行报错的dll
1、将该dll及二次封装前的dll放置到python安装后的根目录,运行python IDLE,提示如下错误。
按照报错路径,发现“MSVCR100D.dll”是存在的。
此时,就怀疑是不是该“MSVCR100D.dll”损坏了,于是将该dll备份,download了一个“MSVCR100D.dll”放到该路径下。再次运行python IDLE,依然提示如上图的错误。
2、将vs2010里的“MSVCR100D.dll”放置到报错路径,运行python IDLE。
搜索vs2010安装目录,发现共有3个“MSVCR100D.dll”,逐个尝试,直到第3个,曙光出现,成功了。
再次运行以前编写的程序,不报错了,设备又复活了。
参考链接:
计算机中丢失 MSVCR100.dll