opencv 无法加载 DLL“****.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。

最近用c++写了一个opencv判断图形相似的小程序,然后用c#调用它,自己在本机运行一切正常,但是发给别人却报错提示“无法加载 DLL“*****.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。”,而且opencv的环境变量确定已经加上了的,最后折腾了一晚上终于解决了,这里记录一下解决思路,给其他看你遇到类似问题的小伙伴一个参考。

环境:opencv4.0,Visual Studio 2017,Win10 x64

无法加载 DLL这类问题基本分为两种情况,第一种是dll位数和调用程序使用的位数不一致,第二种就是这个DLL还依赖其他库文件。基本上90%都是第二种情况,但第一种情况也不排除,检查你dll生成的设置和调用程序设置的是否为一个平台,比如都是x64,我首先排除了第一种情况,因为在本地运行时完全正常,那只能去检查第二种可能,我首先想到的是在报错的机器上安装一个Visual Studio写一个使用opencv的demo,如果缺少库文件的话肯定会给出错误提示,我再去安装就行了,但是很奇怪我刚把Visual Studio装好,没有进行其他任何操作,原来报错的程序就正常运行没有继续提示无法加载dll的问题,因此我更加确信是报错机器缺少其他库文件,但是总不能在每一台需要测试的机器上都先安装一个Visual Studio吧。因此只能采用另一个办法。

这里需要使用到两个工具,方便快速排查问题,下面给出链接

http://www.voidtools.com/,Everything快速文件检索

http://www.dependencywalker.com/,Dependency Walker,检查dll或exe的所有需要的依赖

  • 首先使用Dependency Walker检查你的dll需要的哪些依赖,点击open打开你的dll,等待检测结束

检测结束可以看到所有的依赖项,HDGRDLL.DLL是我写的DLL

可以看到我的dll依赖了五个大项,OPENCV_WORLD400D.DLL、MSVCP140D.DLL、VCRUNTIME140D.DLL、UCRTBASED.DLL、KERNEL32.DLL,如果某一项有标记或者的项就是你电脑缺少的依赖,你就需要用Everything看一下 电脑是否真的缺少这个,比如MSVCP140D.DLL这个系统文件

在System32和SysWOW64下面都有才行(系统库文件都放在这两个文件夹,分别是32位和64位,注意别放错了),没有的话去网上找一下然后放到电脑制定的位置,如果这里有可能是环境变量的原因,再检查下环境变量就行,其他库文件检查方式同理,最后我通过对所有有标黄库文件进行排查最终解决了这个问题

原因是openc依赖了几个库文件,裸机环境基本上没有,如下

我这里已经添加了,所以Dependency Walker没有报错标黄

这几个dll地址:https://download.csdn.net/download/u014622229/10903491

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值