【问题标题】:Matlab executables, passing variable [duplicate]Matlab可执行文件,传递变量[重复]
【发布时间】:2013-05-06 01:54:34
【问题描述】:

如何使用 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 一起使用?

问候

【问题讨论】:

    标签: matlab


    【解决方案1】:

    我只需为可执行文件提供变量即可使您的代码正常工作。

    我第一次运行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 作为第二个和第三个参数。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-11-21
        • 2015-07-28
        • 1970-01-01
        • 2016-10-14
        • 1970-01-01
        • 2014-07-05
        • 2011-03-13
        • 2013-03-22
        • 1970-01-01
        相关资源
        最近更新 更多