问题描述
在跑MATLAB和C++混合编程的一个算法时,出现了如下错误:
MEX 文件 'C:\Project\final code\reference code\lsd.mexw64' 无效: 找不到指定的模块。
如下图所示:
原因分析
根据资料[1]的说法,*.mexw64
文件无效可能的原因是缺少相关的*.dll
文件,因此只需把缺少的*.dll
文件复制到 *.mexw64
文件所在的目录下即可。
但是这些*.dll
文件还是不够的,我们需要知道 *.mexw64
依赖的所有DLL文件。
解决方案
博客[2] 中给出了一个查找mex所依赖的dll文件的方法。
- 下载Dependency Walker (http://www.dependencywalker.com/)
- 在Dependency Walker里面导入有bug的
*.mexw64
文件,得到如下结果:
- 发现缺少了
msvcp100.dll
和msvcr100.dll
这两个文件(libmx.dll
在MATLAB的安装路径中可以找到),在网上(例如:DLL下载站)下载缺少的两个DLL文件。 - 将这两个文件放到
*.mexw64
文件所在的目录下,成功运行。
参考资料
- 解决 Invalid MEX-file ‘xxx.mexw64‘: 找不到指定的模块 的问题
- 解决Matlab: Invalid MEX-file