无法定位程序输入点H5Rdereference于动态链接库 libmat.dll上

无法定位程序输入点H5Rdereference于动态链接库 libmat.dll上

最近想做一个项目,其中需要调用matlab中的动态库,读取.mat文件。按照网上的教程,在win10下vs2019配置环境后,编译时一直报“无法定位程序输入点H5Rdereference于动态链接库 ****/libmat.dll上”的错误。起初看到这个错误非常之懵逼,网上找了一些答案也没有很具体的说明解决方案,经过一天的折腾终于解决,在这里记录一下:
首先,从理论上来讲,出现这种问题主要就是dll动态库发生了冲突,存在多个版本的动态库,而我们的程序没有调到我们希望的动态库。这里需要强调的是,报错显示的是libmat.dll,但是发生问题的不一定是这个dll。
然后介绍一下解决办法。在vs2019IDE中运行程序,发现报错后,在输出的“显示输出来源”中选择调试,可以看到程序都依次调用了哪些动态库。在检查这些动态库时,发现有的动态库来源并不是程序本应该需要动态库的来源,将这个来源在Path环境变量中删除,或者放在所需要的环境变量之后,重启vs后便可以正常了。
出现的错误

可以看到,程序在运行的过程中,调用到了Anaconda3中的dll,肯定是调错dll了

果然,是调错了,这个dll共有3个,我们希望调的是matlab中的dll
这个路径中有相同的dll
之所以出现这个问题是因为,我之前安装Anaconda时,选择了设置环境变量(这个选择在安装是并不是官方推荐的),并且他的顺序也在Matlab之前。程序运行时,如果没有在程序的根目录和脚本根目录或System32中找到所需的dll文件后,最后会在Path环境变量中找一遍,因此首先在Anaconda3中找到了这个dll,于是便使用了这个错误的dll。
解决方法就是在环境变量中删除这个Anaconda3的这个路径,或者把它放在Matlab之后。这样会先调用Matlab中的dll。不建议把出错的dll复制到程序根目录,因为出错的不仅仅是这一个dll,后面还有很多,一个个的复制比较麻烦。
我是直接在环境变量中删除了这个起冲突的路径,然后重启vs2019后,便可以正常运行了。
删除后的环境变量

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值