4

我打算在 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 中工作吗?

4

2 回答 2

3

我对你写的东西有点困惑,所以我可能没有回答你真正的问题:

Matlab 文档提供了关于如何在C 程序中使用Matlab 引擎的清晰说明。由于 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 文件。祝 Matlab 引擎在 iOS 上运行好运!

于 2012-02-23T10:06:13.800 回答
3

MATLAB Compiler 不会将 MATLAB 代码转换为 C 代码,现在已经很久没有这样做了。

相反,它会归档和加密您的 MATLAB 代码并创建一个包装器(它可以是一个可执行文件、一个库,或者,如果您还可以访问任何 Builder 产品,一个 .NET 程序集、一个 Java .jar 文件或一个 Excel加入)。此包装器对您的 MATLAB 代码进行解压缩和解密,并针对 MATLAB Compiler Runtime 执行它,该运行时需要包含在您的应用程序中(但可以自由再分发)。

您将无法在 iOS 上运行 MCR - 它的占用空间太大了。如果您使用 Objective-C 以另一个平台为目标,您可以使用 MATLAB Compiler 生成一个库并从您的 Objective-C 中调用它。

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

于 2012-02-23T13:50:03.577 回答