Как вызвать код MATLAB из Objective C - PullRequest
4 голосов
/ 23 февраля 2012

Я планирую написать свои алгоритмические коды в 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 ??

Ответы [ 2 ]

3 голосов
/ 23 февраля 2012

Компилятор MATLAB не преобразует код MATLAB в код C и долгое время не делал этого.

Вместо этого он архивирует и шифрует ваш код MATLAB и создает оболочку (которая может быть исполняемым файлом).библиотека или, если у вас есть доступ также к любому из продуктов Builder, сборка .NET, файл Java .jar или надстройка Excel).Эта обертка разархивирует и расшифровывает ваш код MATLAB и выполняет его в соответствии со средой выполнения компилятора MATLAB, которая должна быть включена в ваше приложение (но свободно распространяется).

Вы не сможете запустить MCRна iOS - его площадь слишком велика.Если вы нацеливаетесь на другую платформу с Objective-C, вы можете создать библиотеку с использованием компилятора MATLAB и вызывать ее из Objective-C.

MATLAB Coder (не то же самое, что MATLAB Compiler) может преобразовать подмножествоЯзык MATLAB в C-код.Если вы ориентируетесь на iOS, это может быть одним из подходов, или вы могли бы альтернативно запустить свой код MATLAB удаленно, и ваше приложение могло бы получить к нему доступ через Интернет.

3 голосов
/ 23 февраля 2012

Я немного озадачен тем, что вы написали, поэтому, возможно, я не отвечу на ваш настоящий вопрос:

В документации Matlab содержатся четкие инструкции по использованию Matlab engine из программ на C. Поскольку Objective-C - это просто C с включенными ручками, я не вижу причин, по которым вам не следует вызывать движок из программы Objective-C. Все, что движок Matlab увидит при запуске, - это допустимые вызовы, и он не знает, на каком языке написана вызывающая программа.

Я думаю, что для вас использование mcc не имеет значения; Вам нужен компилятор Objective-C на вашем Mac. Документация Matlab предполагает, что компилятор, включенный в XCode до v4.1, подходит для приложений движка Matlab. По моему опыту, может потребоваться немного поработать с параметрами компилятора, чтобы более поздний компилятор работал с вашей установкой Matlab, но не более того.

Если вы планируете использовать Objective-C для вызова Matlab, возможно, вы не захотите начинать с написания M-файлов для своего алгоритмического ядра. На самом деле, вы, вероятно, так и сделаете, но движок Matlab на самом деле не запускает M-файлы, он выполняет команды, отправленные ему внешней программой, такой как ваша программа Objective-C. Ваш путь разработки может быть (1) записать M-файл для реализации алгоритма, а затем (2) написать программу Objective-C, вызывающую движок Matlab, на критических этапах, когда требуется функциональность Matlab. Вы могли бы написать свое приложение, чтобы заставить двигатель запускать M-файл (я думаю), но это вне моего опыта.

Хотя вы можете использовать Matlab для запуска компилятора для сборки ваших программ, в этом случае вам, вероятно, лучше использовать XCode (или предпочитаемую вами Mac IDE) для сборки ваших программ, следя за тем, чтобы обеспечить правильные связи с Двигатель Matlab. Опять же, документация объясняет, что вам нужно делать.

Обертки не задействованы. М-файлы не требуются. И удачи в запуске движка Matlab на iOS!

...