Matlab 'mcc':编译可执行文件时要包含的所有 m 文件?



我有一个 Matlab 脚本go.m,可以创建自定义对象并运行 一套模拟。 有兴趣将其移植到 一个不同的网络,其中 Matlab 许可证很少。我们 策略是将脚本编译为独立的 *.exe 这样它就可以在不用完许可证的情况下运行。 一旦我想通了 在所有绳索中,将安装 Matlab 编译器运行时 在目标系统上。

我设法使用命令行mcc来编译TMW在线示例, 魔术广场。 使用cygwin的 bash:

$ cd ~/bin
$ ln -s "/c/Program Files/MATLAB/Single_R2015b/bin/mcc.bat" mcc
$ cd ~/tmp/magicSqr
$ mcc -m magicsquare.m
# startup.m messages indicate that this launches Matlab
$ ./magicsquare.exe 5
Running C:cygwin64tmpUser.NamemcrCache9.0magics1UsersUser.NameDocumentsMATLABstartup
m =  17  24   1   8  15
23   5   7  14  16
4   6  13  20  22
10  12  19  21   3
11  18  25   2   9

目录规范.和文件扩展名都.exe是需要的。

我的下一步是推动全面的go.m通过 过程,看看有什么问题,并找到最不繁重的处理方式 它。 至少繁重,我的意思是需要最少代码的策略 修改,以便我不会维护单独的代码库 开发与移植到目标。

mcc编译有效:mcc -m go.m. 运行*.exe但是,文件导致第一个可执行语句的损坏:profile off. 正如我所说,在个人基础上进行战术性重新编码 非常难吃,所以我寻找一种识别所有文件的方法 在运行mcc时包括在内。inmem了两条有希望的线索和requiredFilesAndProducts. 但是,上述网页也警告:

不要使用依赖关系报告来确定哪个 MATLAB 代码 其他人需要的文件来运行特定文件。而是使用 matlab.codetools.requiredFilesAndProducts 函数。

似乎要避免的依赖关系报告是指m文件输出自inmem. 这通过检查 说 M 文件 -- 列表非常长,并且包括功能 这甚至使 Matlab 的which命令感到困惑:

>> which matricize
'matricize' not found.

标识要包含的 m 文件的唯一其他候选者是fList输出来自requiredFilesAndProducts. 它似乎包括 我的自定义类的所有方法,以及所有调用的 M 文件 居住在c:UsersUser.NameDocumentsMATLAB(唯一的 我的路径中的自定义文件夹(。 但是,它肯定不包括profile上述错误的基础命令。

识别所有m文件和/或文件夹的最佳方法是什么 其中mcc? 然后处理任何剩余的是否合理 使用条件执行的导致错误的语句,例如if ~isdeployed; <...problematic statements...>; end

您可以参考此处文档页面上的列表,了解有关使用 MATLAB 编译器和 MATLAB 编译器 SDK 产品编译的不受支持的函数的信息: https://www.mathworks.com/help/compiler/unsupported-functions.html

下面的页面还显示了与每个工具箱的 MATLAB 编译器的兼容性: https://www.mathworks.com/products/compiler/supported/compiler_support.html

相关内容

  • 没有找到相关文章

最新更新