Компилятор MATLAB против Кодера MATLAB

в чем разница между этими двумя?

насколько я понимаю, компилятор MATLAB обертывает код MATLAB в a .exe-файл, чтобы его можно было использовать без установки MATLAB, и требуется только MCR. Кроме того, MATLAB Builder NE также может использоваться для создания сборок .Net, которые будут использоваться с .Net framework вместо .exe-файл, но они по-прежнему требуют MCR.

теперь я не понимаю, для чего использовался кодер MATLAB? Он генерирует код C / C++. Но это Матлаб код действительно преобразован в C / C++, или он просто упакован, как в случае компилятора MATLAB? Ему также нужен MCR для запуска?

Я понимаю, что это не совсем программирования вопрос. Но я искал в интернете и до сих пор не нашел четкого ответа. Это очень дорогие продукты, поэтому я хотел бы знать, во что я ввязываюсь.

3 ответов


компилятор MATLAB шифрует и архивирует ваш код MATLAB (который остается как MATLAB .m код), и упаковывает его в тонкий исполняемый (либо .exe или .dll) обертка. Это доставляется конечному пользователю вместе со средой выполнения компилятора MATLAB (MCR). Если вы хотите, MCR также может быть упакован в исполняемый файл.

MCR свободно распространяется, и вы можете думать о нем как о копии MATLAB без фронтального рабочего стола.

когда пользователь запускает исполняемый файл, он деархивирует и расшифровывает код MATLAB и запускает его против MCR вместо MATLAB. Поэтому приложения, поставляемые с помощью этого метода, должны работать точно так же, как и в MATLAB (включая ту же скорость).

кодер MATLAB преобразует подмножество языка MATLAB в код C. Затем это можно использовать по-разному, включая возврат в MATLAB в виде файла mex, скомпилированного с компилятором C, который будет вызываться из другое приложение, или доставлено на встроенное устройство. Поскольку это код C, а не код MATLAB, он часто (хотя и не всегда) работает намного быстрее, чем исходный код MATLAB. Код C не требует MCR. Поддерживаемое подмножество языка MATLAB очень обширно, но есть несколько заметных ограничений, которые вы хотели бы изучить, прежде чем совершать этот рабочий процесс. Полученный код является кодом C, хотя он может создавать оболочку c++, если вам нужно использовать c++ компилятор, а не компилятором.

компилятор MATLAB предназначен для случая использования, который вы хотите просто и (справедливо) прямо поделиться приложением MATLAB, которое вы написали с кем-то, у кого нет копии MATLAB. С момента развертывания .m код зашифрован, его также можно использовать для обмена кодом MATLAB при защите интеллектуальной собственности.

кодер MATLAB имеет другие варианты использования, такие как желание ускорить код MATLAB путем преобразования в файл mex или создания кода C для другого приложения или встроенного устройства.

Если у вас есть более подробные вопросы, я бы рекомендовал вам просто вызвать MathWorks и задать их.


редактировать: приведенная выше информация верна для версий MATLAB R2014b и ниже. Начиная с MATLAB R2015a, функциональность от компилятор MATLAB был ремикс с функциональностью из MATLAB Строитель!--4--> продукты, и есть также новый продукт MATLAB Compiler SDK.

по состоянию на R2015a,компилятор MATLAB работает так же, как описано выше (т. е. шифрует, архивирует и пакет, но не создает C), но теперь будет упаковываться как .exe, и как надстройка Excel (.XLA), на. До R2015a эта функциональность присутствовала в продукте Matlab Builder EX для Excel.

по состоянию на R2015a,компилятор MATLAB нет больше производит .компоненты библиотеки DLL. Эта функциональность была перемещена в новый продукт MATLAB Compiler SDK, который также включает функциональность для создания сборок .NET и классов Java. До R2015a эта функциональность присутствовала в продуктах Matlab Builder NE для .NET и Matlab Builder JA для Java.

другими словами:

в R2014b и ниже, мы имели:

компилятор MATLAB: производить.exe и .компоненты dll

Matlab Builder NE для .NET: производить сборки .NET

Matlab Builder JA для Java: создание классов Java

MATLAB Builder EX для Microsoft Excel: создание надстроек Excel.

в R2015a, мы имеем:

компилятор MATLAB: произвести .exe и Excel надстройки

MATLAB Compiler SDK: произвести .библиотеки DLL .Net сборок и классы Java.

область и варианты использования кодер MATLAB не изменились в этих выпусках (хотя есть новые функции).


редактировать: по состоянию на R2015b,MATLAB Compiler SDK также создает пакеты Python.


дополнительная информация о различении кодер MATLAB и компилятор MATLAB для C/C++ можно найти здесь.

таблица сравнения различных продукты MATLAB для генерации кода.


MATLAB Compiler SDK предоставляет общие библиотеки, которые работают против среды выполнения MATLAB (MCR). Он поддерживает большинство функций в MATLAB, включая графику, и защищает вашу интеллектуальную собственность путем шифрования кода MATLAB.

Matlab Coder, с другой стороны, обеспечивает читаемый и портативный исходный код. Он поддерживает подмножество языка MATLAB, ориентированного на алгоритмы, выполняющие численные вычисления.

этот MATLAB ответы идет в более подробную сравнение эти два подхода:--1-->

http://www.mathworks.com/matlabcentral/answers/223937-should-i-use-matlab-compiler-sdk-or-matlab-coder-to-integrate-my-matlab-applications-with-c-c

например, MATLAB Compiler SDK может быть развернут только на платформах, поддерживающих MATLAB (Windows, Mac, Linux), тогда как MATLAB Coder генерирует C-код, который может работать на любой платформе, поддерживающей C-код.

кроме того, упакованный код из MATLAB Compiler SDK зашифрован для защиты IP, тогда как сгенерированный код C из Matlab Coder может быть защищен таким же образом, как защищен рукописный код C.

также стоит отметить, что сгенерированный код C из Matlab Coder имеет потенциал более быстрого выполнения, в то время как упакованный код из Matlab Compiler SDK будет работать так же быстро, как и в MATLAB.


Я не эксперт, но кодер описывается как генерирующий автономной код C / C++, не упоминая MCR. Однако я замечаю, что он говорит, что он поддерживает только "подмножество" языка Matlab, о котором вы можете прочитать больше здесь. Компилятор, похоже, просто упаковывает ваш код Matlab, как вы предложили, поэтому, вероятно, поддерживает большинство функций.