Matlab可执行文件,传递变量

时间:2013-05-06 01:54:35

标签: matlab

如何使用deploytool从.m函数获取可执行文件并使用它?

说,我有.m名称foo,这是代码:

function product = foo(array_a,array_b)
product = array_a.*array_b
end

现在我使用deploytool生成foo.exe,如何在相同的工作空间变量,AKA array_a和array_b中使用它?

此致

2 个答案:

答案 0 :(得分:3)

我通过向变量提供可执行文件来使代码工作。

我第一次跑mbuild -setup。我有你的文件,名为foo2.m

function product = foo(array_a,array_b)
if ischar(array_a)
array_a = str2num(array_a);
end
if ischar(array_b)
array_b = str2num(array_b);
end

product = array_a.*array_b
end

唯一的区别是我确保输入被处理为数字而不是字符串。然后,我编译:

mcc -mv -R -singleCompThread -N -p optim -p stats foo2.m

(这个命令的一个很好的解释在这里:MCC example。我用链接来帮助我实现它。)

然后,只需执行该功能。

./run_foo2.sh /usr/local/MATLAB/R2011a/ 1 2

...

product =
 2

确保将编译器库的位置指定为第一个参数,然后将array_a和array_b指定为第2个和第3个参数。

我在尝试运行可执行文件时遇到错误:error while loading shared libraries: libmwmclmcrrt.so.7.15: cannot open shared object file。我通过查找库文件路径(使用find . -name "libmwmclmcrrt.so*")来修复此问题。然后,当我调用可执行文件时,我更正了我提供的库路径作为第一个参数。

答案 1 :(得分:1)

您可以使用 eval 将字符串转换为其他数据类型,例如数组。有关详细信息,请参阅here

此外,如果您想保护源代码, pcode 可能是另一种方式。