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 运行时 (MCR) 编译 Matlab 脚本