我正计划在Matlab中编写我的算法代码。我需要将.m文件转换为Objective-C可以访问的格式。当我尝试mcc时,出现以下错误。
The -t switch is no longer supported; the Compiler no longer generates C/C++
source code for M-functions (it generates wrapper functions instead, see
the documenation for -W).
如果mcc没有创建C源代码,我该如何生成包装器?我必须复制m文件和包装器,以使一切正常吗?这些包装器是否可以在iOS中使用?
答案 0 :(得分:3)
我对你所写的内容感到有些困惑所以我可能没有回答你真正的问题:
Matlab文档提供了有关如何使用C程序中Matlab engine的明确说明。由于Objective-C只是带有旋钮的C,我认为没有理由不从Objective-C程序调用引擎。 Matlab引擎在运行时将看到的所有内容都是有效的调用,它不知道调用程序的语言是什么语言。
我认为你对mcc的使用是无关紧要的;你需要的是Mac上的Objective-C编译器。 Matlab文档表明,XCode中包含的编译器直到v4.1对于Matlab引擎应用程序来说是可以的。根据我的经验,可能需要花一些时间来编译器选项,以使更新的编译器能够与您的Matlab安装一起工作,但仅限于此。
如果您打算使用Objective-C调用Matlab,您可能不想从为您的算法核心编写M文件开始。实际上,您可能会,但Matlab引擎并不真正运行M文件,它执行外部程序(例如Objective-C程序)发送给它的命令。您的开发路径可能是(1)编写M文件来实现算法,然后(2)在需要Matlab功能时,在关键步骤编写Objective-C程序调用Matlab引擎。您可以编写应用程序以使引擎运行M文件(我认为),但这超出了我的经验。
虽然您可以使用Matlab运行编译器来构建程序,但在这种情况下,您可能更好地使用XCode(或您首选的Mac IDE)来构建程序,注意确保正确的链接与Matlab引擎。同样,文档解释了您需要做什么。
不涉及包装器。不需要M文件。祝你在iOS上运行Matlab引擎好运!
答案 1 :(得分:3)
MATLAB编译器不会将MATLAB代码转换为C代码,并且很长时间没有这样做。
相反,它会归档和加密您的MATLAB代码并创建一个包装器(可以是一个可执行文件,一个库,或者,如果您也可以访问任何Builder产品,.NET程序集,Java .jar文件,或Excel加载项)。这个包装器解密并解密你的MATLAB代码,并根据你的应用程序包含的MATLAB Compiler Runtime执行它(但是可以自由地重新发布)。
你无法在iOS上运行MCR - 它的足迹太大了。如果您使用Objective-C定位另一个平台,可以使用MATLAB Compiler生成一个库,并从Objective-C中调用它。
MATLAB Coder(与MATLAB编译器不同)可以将MATLAB语言的子集转换为C代码。如果您的目标是iOS,这可能是一种方法,或者您可以远程运行您的MATLAB代码,并让您的应用程序通过网络访问它。