You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下MATLAB MCC多M文件可执行文件内部函数调用报错解决

解决MATLAB MCC编译多M文件运行时的大小写匹配错误

问题背景

在Linux环境下使用mcc编译多M文件生成可执行文件:

  • 原M文件:定义functionXYZ(a1, a2, a3)函数
  • Wrapper M文件:作为入口点,加载MAT工作区文件并调用原函数,代码如下:
function res = functionXYZWrapper(workspace)
  load(workspace);
  res = functionXYZ(a1, a2, a3);
end

执行编译命令:

mcc -mv tests/functionXYZ/functionXYZWrapper.m functionXYZ.m

运行生成的run_functionXYZWrapper.sh时出现错误:

Cannot find an exact (case-sensitive) match for 'functionXYZ'

The closest match is: functionXYZ in /home/user/.mcrCache9.4/getMid1/functionXYZ.m

Error in functionXYZWrapper (line 3)
MATLAB:dispatcher:InexactCaseMatch

用户需搭建CI流水线,不想绑定MAT文件的原因:

  • 无需修改原函数代码结构来加载MAT文件
  • 避免每次测试都单独编译可执行文件,实现wrapper动态加载不同MAT文件
  • 减少CI流水线中容器镜像构建的负载

解决方案

1. 严格核对函数名大小写一致性

MATLAB编译后的MCR环境对函数名大小写完全敏感,即使提示有相近匹配,也必须确保:

  • Wrapper中调用的functionXYZ与原M文件中的函数定义完全一致(包括每个字母的大小写)
  • 原M文件的文件名与函数名完全一致(比如原函数是functionXYZ,文件名必须是functionXYZ.m,不能是FunctionXYZ.m)

2. 编译时指定原函数的完整路径

编译时如果原functionXYZ.m不在当前工作目录,需指定完整路径,确保mcc正确包含该文件:

mcc -mv tests/functionXYZ/functionXYZWrapper.m /full/path/to/functionXYZ.m

3. 在Wrapper中显式添加路径

在Wrapper函数开头添加路径,确保MCR运行时能找到原函数:

function res = functionXYZWrapper(workspace)
  % 添加当前目录到搜索路径
  addpath(pwd);
  % 若原函数在特定目录,可直接添加该目录
  % addpath('/full/path/to/directory-containing-functionXYZ');
  load(workspace);
  res = functionXYZ(a1, a2, a3);
end

修改后重新编译即可,这样编译后的可执行文件能动态加载不同的MAT文件,无需重复编译。

4. 清理MCR缓存目录

错误提示中提到了MCR缓存路径,旧缓存可能导致路径冲突,删除缓存后重新运行:

rm -rf /home/user/.mcrCache9.4/getMid1/
./run_functionXYZWrapper.sh /usr/local/MATLAB/R2018a/ ../test.mat

内容的提问来源于stack exchange,提问作者rbaleksandar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 16:27:32