这几天在安装open3d库的时候一直报出“DLL load failed while importing pybind:动态链接库(DLL)初始化例程失败”的错误。扒了很多经验贴,仍然一筹莫展,非常令人头秃。
前人经验总结:
前人栽树,后人乘凉。先总结一下大佬们遇到这种情况时常用的解决方案:
使用Dependencies工具对.pyd进行检查,修复依赖关系(例如没有识别到python39.dll,可能是没有添加python解释器的环境变量,如果使用的是Anaconda,那么在环境变量中添加如下路径);
下载地址:Dependencies_x64_Release.zip
使用DirectX修复工具对C++库进行修复,修复后重启电脑,重新安装open3d;
使用CPU-Z检查CPU指令集是否包含AVX,如果CPU年事过高,可能将无法支持open3d库;
下载地址:CPU-Z官网下载地址
方案1、2我都尝试过,并没有作用;
看到有人说CUDA版本不匹配也会导致这个问题,但是我重装了CUDA,显然也不是这个原因;
对于方案3,我起初认为我的i5-12490F还是年轻小伙,不至于因为缺指令集导致不支持open3d的问题,所以一直没去检查。
BUT!!!
折腾了两天,已经想着重装系统最后一搏了。保守起见,我准备先在虚拟机上试一下,然后发现虚拟机上也是这个问题。这时候我才想到有大佬发帖说过CPU的指令集问题。
于是,我拿出我之前用的老电脑(此前配置环境一直正常),用CPU-Z比较了两台机子CPU的指令集。果不其然,i5-12490F(右)缺少了AVX指令集,但是岁数更高的i7-9750H却在显摆着“嘿嘿,我有!”。
最后百度了一番,发现是自己才疏学浅了。据说AVX打开后会产生巨大的发热量,所以现在很多主板默认将其关闭。但是我们可以进入bios进行更改,修改方法详见如下链接:
至此,问题的关键就是AVX指令集的缺失,打开AVX后,open3d可以被正常加载了。
如有类似问题,可做参考。但具体问题需要具体分析。
祝各位早日解决问题,步入正轨!
参考: