2012-02-23 66 views
4

我打算在Matlab中编写我的算法代码。我需要将.m文件转换为Objective-C可以访问的格式。当我尝试mcc时,出现以下错误。如何从目标C调用MATLAB代码

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中工作吗?

回答

3

MATLAB编译器不会将MATLAB代码转换为C代码,而且现在还没有这么长时间。

相反,它存档和加密你的MATLAB代码并创建一个包装器(可能是一个可执行文件,一个库,或者,如果你也可以访问任何Builder产品,一个.NET程序集,一个Java .jar文件,或Excel加载项)。这个包装器对你的MATLAB代码进行解密和解密,并根据需要包含在你的应用程序中的MATLAB Compiler Runtime来执行它(但是可以自由地再分发)。

你不能在iOS上运行MCR - 它的占用空间太大。如果您使用Objective-C定位另一个平台,则可以使用MATLAB Compiler生成一个库,并从您的Objective-C调用该库。

MATLAB编码器(与MATLAB编译器不一样)可以将MATLAB语言的一个子集转换为C代码。如果您的目标是iOS,这将是一种方法,或者您可以远程运行您的MATLAB代码,并让您的应用程序通过网络访问它。

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引擎!