Matlab 编译器 (mcc) 不包括引用函数

Posted

技术标签:

【中文标题】Matlab 编译器 (mcc) 不包括引用函数【英文标题】:Matlab compiler (mcc) not including referenced functions 【发布时间】:2014-03-15 21:12:15 【问题描述】:

我正在尝试将 matlab 源文件 (.m) 编译为独立应用程序(在 linux 上)。在我的 .m 文件中,我正在调用一个函数(特别是来自名为 MALSAR 的库),该函数似乎正在使用一些已编译的库(.mexglx .mexmaci64 .mexw32 .mexw64)。当我编译我的源文件时,我使用“-I”选项包含了 MALSAR 包下的所有子目录,如下所示

mcc -mv -I <dir1> -I <dir2> .... myfile.m

编译没有给出警告,但是当我执行独立的可执行文件时,我得到一个 MATLAB:fileHasDisappeared 错误。我正在使用 mcc 4.18 版。

详细的错误输出如下。

The file
   '/home/acharuva/Projects/scot/ext/MALSAR/functions/joint_feature_learning/Logistic_L21.m'
   is not in the application's expanded CTF archive at
    '/home/acharuva/.mcrCache8.1/run_l20'.
This is typically caused by calls to ADDPATH in your startup.m or matlabrc.m files. Please see the compiler documentation and use the ISDEPLOYED function to ensure ADDPATH commands are not executed by deployed applications.
Previously accessible file "/home/acharuva/Projects/scot/ext/MALSAR/functions/joint_feature_learning/Logistic_L21.m" is now inaccessible.

Error in run_l21_cross (line 34)

MATLAB:fileHasDisappeared

任何帮助将不胜感激。谢谢。

【问题讨论】:

这么明显而且可能很愚蠢的问题是 - 您在属于该项目的任何 m 文件中是否有 ADDPATH 命令? 我的错,我没有检查明显的:)。非常感谢@Divakar 【参考方案1】:

从错误消息中可以明显看出,正如@Divakar 指出的那样,这是由代码中的 addpath() 函数引起的,我没有检查该函数。修复该错误。

【讨论】:

【参考方案2】:

在 Matlab .m 文件中,使用 isdeployed 标志覆盖 ADDPATH。否则,当从编译器构建代码时,它会给出“以前可访问的文件”错误。 修复它:

%isdeployed=false 表示文件从 matlab 应用程序运行,如果 true 表示从编译器运行

  if(isdeployed==false)

    addpath(...);

    end

【讨论】:

以上是关于Matlab 编译器 (mcc) 不包括引用函数的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB封装子系统后如何解封装?

MatLab 2014a编译jar包时mcc无法使用的问题

在独立的 Matlab 可执行文件中嵌入全局变量?

如何为指定的 Matlab 运行时 (MCR) 编译 Matlab 脚本

使用 .NET 依赖项和封装数据的枚举构建 dll 时,mcc 编译器“Depfun 错误”

C++调用matlab数学函数问题