0

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

我设法使用命令行mcc来编译 TMW 在线示例 magicsquare。使用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:\cygwin64\tmp\User.Name\mcrCache9.0\magics1\Users\User.Name\Documents\MATLAB\startup
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。两个有希望的线索是inmemrequiredFilesAndProducts。但是,上面的网页也警告:

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

似乎避免的依赖关系报告是指 来自. 对上述 m 文件的检查证实了这一点——该列表非常长,并且包括甚至混淆了 Matlab命令的函数:inmemwhich

>> which matricize
'matricize' not found.

识别要包含的m文件的唯一其他候选对象是 来自requiredFilesAndProducts. 它似乎包括我的自定义类的所有方法,以及驻留在c:\Users\User.Name\Documents\MATLAB\(我的路径中唯一的自定义文件夹)中的所有调用的 m 文件。但是,它当然不包括 profile导致上述错误的命令。

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

4

1 回答 1

1

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

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

于 2018-06-21T19:08:50.353 回答