如何处理Simulink编译CANoe工程报错提示MEX 文件’sigout.mexw64’无效:找不到指定的模块?
现象描述
MEX 文件’sigout.mexw64’无效:找不到指定的模块。
开始以为是MATLAB和Visual Studio的问题,反复重装多次仍然不行。
资料搜集
以“MEX 文件 ‘sigout.mexw64’ 无效: 找不到指定的模块。”为关键词搜索,找到了如下几种解释:
- 需要重新编译文件。
重新编译即可,
对.cpp文件:mex XXX.cpp
对.cu文件:mexcuda XXX.cu
- mexw64文件和.h .dll不在同目录下。
在Matlab平台项目中,之前曾经碰到过这个问题——Invalid mex-file 找不到指定的模块。
.cpp .h和.dll放在不同的文件夹下,在.cpp中使用.h .dll都是使用的相对路径,通过mex test.cpp编译是可以成功的,但是在调用的时候就会出问题。(原因未知)
所以mexw64文件和.h .dll应该在同目录下,并且使用到mexw64库函数的.m文件也必须放在同一个目录下面,所以最后就是.m .mexw64 .h .dll文件都放到同目录下问题就解决了。
- MATLAB® 找不到 MEX 文件引用的所有 .dll 文件,则无法加载该 MEX 文件。
如果 MATLAB® 找不到 MEX 文件引用的所有 .dll 文件,则无法加载该 MEX 文件。MATLAB 显示以下错误消息:
Invalid MEX-file mexfilename:
The specified module could not be found.
在 Windows® 系统上,从网站 https://www.dependencywalker.com 下载 Dependency Walker 实用工具。
分析
首先因为是CANoe公司给的文件,我找不到.cpp文件。
检查理由2和3,其实说的是一个理由:编译的时候找不到mex文件对应的dll文件。
下载Dependency Walker进行分析,发现缺少API-MS-WIN-CORE-APIQUERY-L1-1-0.DLL文件。
一个一个搜索然后网站上下载dll文件不现实,提示API-*.DLL应该是缺少某个系统的组件包。
搜索了一下这一系列的dll文件对应Microsoft Visual C++ Redist。
到it天空(https://www.itsk.com)下载一键运行库,解决问题。
REF
https://blog.csdn.net/yysyys1/article/details/117573298
https://blog.csdn.net/JackieFrederickHYZ/article/details/78572526
https://ww2.mathworks.cn/help/matlab/matlab_external/invalid-mex-file-error.html
https://stackoverflow.com/questions/36240215/dependency-walker-missing-dlls
https://windll.com/zh/dll/microsoft-corporation/api-ms-win-core-apiquery-l1-1-0#method-3
Microsoft Visual C++ Redist 2015:
https://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x64.exe
https://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x86.exe