Создание автономного приложения из кода Matlab - PullRequest
5 голосов
/ 08 июля 2010

У меня есть некоторый код Matlab и графический интерфейс для него, и я хочу создать отдельный .exe-файл, чтобы его можно было использовать на компьютерах, на которых не установлен Matlab.

Я знаю о компиляторе Matlab и о том, как его использовать, но он создает .exe, который работает, только если у пользователя установлена ​​среда выполнения компилятора MATLAB (MCR).

Что меня интересует, так это наличие каких-либо способов создания автономного .exe-файла, который все еще использует код Matlab, но не зависит от MCR. Я хочу, чтобы он просто запускался, когда вы нажимаете на него, не устанавливая ничего другого.

Я знаю, что C может использовать Matlab, есть ли способ использовать код с C? Как насчет альтернатив с открытым исходным кодом Matlab, которые могут это сделать?

В крайнем случае, если бы я переписал код Matlab на другом языке, какой язык вы бы порекомендовали? Я думал C или Python.

Спасибо.

Ответы [ 5 ]

2 голосов
/ 25 апреля 2013

Требуется MCR, но есть хитрость: на самом деле не нужно устанавливать , это просто доступно в PATH.Запуск MCR не требует каких-либо записей в реестре или чего-то особенного в процессе установки.Вам просто нужно, чтобы файлы MCR были читаемыми, а библиотеки DLL - доступными с помощью обычного механизма поиска, который включает проверку PATH во время запуска программы.

Например, я запустил скомпилированные приложения Matlab с помощью MCR, который "установлено "на сетевой диск.Вы запускаете установщик MCR на одном компьютере и устанавливаете его на сетевой диск X:\Matlab\MCR\R2010b-win32 вместо обычного C:\Program Files расположения.Затем запустите вашу программу через скрипт-обертку, который добавляет X:\Matlab\MCR\R2010b-win32\bin\win32 в PATH перед вызовом вашего фактического файла .exe, и она будет работать на любом другом компьютере, который видит тот же диск, даже если установщик MCR еще не был установлен.беги на них.(В конце концов мы остановились, потому что загрузка MCR из сети - это снижение производительности.)

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

Конечно, проконсультируйтесь с вашими законными людьми, чтобы убедиться, что это не нарушает условия вашего лицензирования.

2 голосов
/ 08 июля 2010

Прошло много времени с тех пор, как я посмотрел на компилятор MATLAB, но, если я правильно помню, он имел обыкновение генерировать код на C / C ++, а не делать все возможное и генерировать исполняемый файл.Зависание всегда было в том, какие наборы инструментов использовались вашим кодом и поддерживал ли их компилятор или нет.Есть ли шанс, что вы сможете установить приложение MATLAB на сервер и использовать настольный клиентский телефон для получения результатов?

Что касается других языков, я бы проверил NumPy и SciPy в комбинациис помощью matplotlib (matplotlib.sf.net).Я сейчас работаю с разработчиком MATLAB, и пока он очень доволен этим опытом.

1 голос
/ 11 сентября 2011

MathWorks недавно представила новый продукт MATLAB Coder . Он способен генерировать код C \ C ++ из вашего кода MATLAB (генерирует исходный код, а не исполняемые файлы). Сгенерированный код является переносимым и не зависит от MCR, хотя он поддерживает только подмножество основных функций языка MATLAB.

1 голос
/ 08 июля 2010

Я немного исследовал, и я боюсь, что ваш единственный вариант - либо использовать MCR, либо конвертировать ваш код на другой язык. Имеет смысл, что MathWorks захочет, чтобы вы использовали только их компилятор для создания файлов .exe.

Рассматривайте другой язык, только если вы уже знакомы с ним и / или у вас достаточно времени для того, что вы пытаетесь достичь. Кроме того, если вы используете функции в Matlab, которые вы не писали, вам придется также написать их, что может быть очень трудно / невозможно.

Если ничего из вышеперечисленного не является проблемой, то какой язык вы должны использовать, действительно зависит от вас. Вы не ограничены только C и Python. Matlab, по моему мнению, очень похож на другие распространенные языки, по крайней мере, с точки зрения синтаксиса. В любом случае вам придется немного поучиться, поэтому я бы посоветовал вам перейти на язык, который вы знаете, или выбрать язык, для которого легко найти помощь. C # и Java - два наиболее известных языка.

0 голосов
/ 18 апреля 2013

Matlab 'compiler' не является компилятором.Он переводит m-код Matlab в код C ++, а затем отправляет его фактическому компилятору, например, в Visual Studio и т. Д. Код, который он делает, не очень удобен для чтения человеком.

Чтобы создать автономное приложение, установитеследующие наборы инструментов (по любой цене, которую вы заплатили):

MATLAB Builder JA, MATLAB Builder NE, компилятор MATLAB

Настройте компилятор Matlab, указав его на фактический компилятор на вашем диске (т.е.mbuild -setup).

Выберите компилятор: [1] Microsoft Visual C ++ 2008 SP1 в C: \ Program Files (x86) \ Microsoft Visual Studio 9.0

Затем используйте (т. е. тип deploytool) сделать основной и определить различные вспомогательные функции и т. д. Раздел окна консоли или автономно.Затем нажмите кнопку сборки.Это сделает exe-файл для вас.При необходимости вы также можете скомпилировать в DLL и т. Д.

Более новые версии 'компилятора' поддерживают компиляцию eval, всех лицензированных наборов инструментов, а также поддерживает импорт классов Java, что позволит вам использовать, например,, DOM для разбора XML-файла и т. д.

Чтобы использовать полученный exe-файл на компьютере, на котором не установлен Matlab, вам необходимо получить Matlab MCR и установить его.MCR должен точно соответствовать версии Matlab, которую вы использовали для создания скомпилированного кода.

С уважением,

Иван

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...