|
|
|
| 31.08.2013, 02:10 | |
|
Маньяки... 350 метров, чтобы график построить?! Существует способ иметь внутри exe старый вариант Matlab C++ Math Library, при этом можно не устанавливать и не запускать никаких инсталляторов, а просто положить нужные dll'ки рядом с exe файлом.
Кому интересно, можете заглянуть сюда: Matlab C++ Math Library. Там я использую набор файлов из Matlab 6.5, где есть около 400 матричных функций и всё это в архиве занимает 8,5 Мбайт! По ссылке на тему можно найти исходники в репозитории svn и посмотреть как это сделано. Этой информации нет в нескольких известных книжках по теме. Я использую численную библиотеку Matlab как дополнение к SMath Studio, где теперь доступны больше сотни Matlab функций. Причем стоить заметить, что функции у меня вызываются из C# кода через специальный посредник, написанный на C++/CLI. Ничто не мешает использовать мой приём в любой exe программе. Там есть некоторые тонкости, которые зависят от того, где вы делаете вычисления: в dll или exe. Если вы будете хранить движок матлаба внутри и при инсталляции распаковывать в определенное место, то нужно сделать так, чтобы dll'ки матлаба могли найти друг друга при загрузке. У меня это сделано без модификации переменной окружения path. Ещё могу добавить, что можно заставить работать 32разрядный неуправляемый код, даже если он вызывается из управляемого кода на 64-разрядной машине. Поэтому эту старую RTL можно использовать и сейчас. Всё прекрасно работает и не нужно никаких левых сотней мегабайт в довесок.
0
|
|
| 31.08.2013, 02:10 | |
|
Ответы с готовыми решениями:
164
Matlab gui открытие exe файла в программе Создание exe файла Создание exe файла |
|
|
||
| 31.08.2013, 13:41 [ТС] | ||
|
Так это не компелирование программы через Матлаб для standalone использования получается, а прикручивание функций Матлаба через библиотеки в другие проги на других языках. С таким же успехом можно было вообще всё писать на Python, который ту же матлабовскую библиотеку юзает. А вот
0
|
||
|
|
|
| 31.08.2013, 15:28 | |
|
Когда вы "компилируете" такого рода m-файл, то вы неявно делаете то же самое. Никакого тайного смысла сия операция не предполагает. Просто компилятор matlab делает некоторую работу за тех, кто в ней ничего не понимает, а именно, связывает функции, которые используются в m-файле, со своими библиотеками. Вы можете проделать те же операции самостоятельно, если понимаете что к чему. Я-то как раз таки понимаю что к чему, так как читаю документацию: MATLAB C/C++ Graphics Library User's Guide.
Я о том, что можно использовать дистрибутив их старой библиотеки размером в 8,5 метров и получить практически те же результаты для простых применений, которые могут быть получены с дистрибутивом в 300 метров. Разница существенная для отдельно взятого приложения. Если я хочу использовать, к примеру, функцию fft2() из их библиотеки или численный решатель жёсткого ОДУ ode15s(), то накой чёрт мне нужны эти 300 метров в довесок? Оно прекрасно работает и со старой библиотекой. Причём я графическими возможностями Matlab RTL в своём плагине к SMath Studio не пользуюсь, т.к. они там не нужны. У Смоленцева (книжка 2006 г.) неплохо описано подключение этой библиотеки, но он просто перевёл хороше руководство, но своего ничего не добавил. Те же примеры работы с численными решателями ОДУ в C++ программе у него отсутствуют (идут не далее одного примера из руководства).
1
|
|
|
|
||||||
| 31.08.2013, 16:09 | ||||||
|
Скомпилировал я одну демку из стандартных примеров Matlab 6.5:
1
|
||||||
|
|
|
| 31.08.2013, 23:24 | |
|
Ну резок немного, бывает. Что касаемо упомянутой мною библиотеки Matlab 10-летней давности, то с сожалением должен сказать, что на просторах сети очень трудно найти кого-то, кто ей бы пользовался. Кроме того, при компиляции современными компиляторами нужно немного допиливать проект, чтобы сборка прошла успешно, так как немного всё устарело. Это касается использования функций, где параметрами выступают тоже функции, типа решателей ОДУ.
Меня-то как раз больше всего решатели ОДУ для жёстких систем интересовали. В сети таковых в свободном доступе можно по пальцам одной руки пересчитать. Всё остальное там тоже в принципе интересно, только матричный подход не очень удобен, приходится выковыривать результаты. Для людей, которых интересуют численные расчёты в неуправляемом пространстве на C++, эта библиотека должна быть на первых местах в инструментарии. Она покрывает большую часть типичных численных расчётов, кроме того синтаксис программы получается максимально приближен к тому, что мы видим в m-файлах.
0
|
|
|
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 15
|
|
| 02.09.2013, 11:43 | |
|
А можно создать приложение без установки MCR (MATLAB Component Runtime)?
0
|
|
|
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 15
|
|
| 02.09.2013, 12:53 | |
|
Но это же только в Matlab 6.5? А в новых всё так плохо?
0
|
|
|
|
|
| 02.09.2013, 14:54 | |
|
Я разобрался только с Matlab 6.5, так как не хотел устанавливать MCR из новых версий. Они слишком много занимают. Практически столько же как Matlab 6.5 целиком. Для моего приложения в 100 КБайт просить пользователя устанавливать несколько сот мегабайт как-то не очень хорошо.
Тут вопрос в том, а что именно вам нужно от Matlab'а и в каком окружении? Если это какие-то новые фичи из новых версий, то пользуйтесь уж тем что есть, а если вы хотите как я получить доступ из C++ к нескольким сотням матричных численных функций, то существует способ попроще, без установок, без Matlab'а и дополнительным размером в 8,5 Мбайт всего. Пробовать то же самое для новых версий я тоже буду, но попозже, когда до меня дойдёт очередная книжка Смоленцева и Ко, где .Net уже используется. По идее там должно быть попроще. Надеюсь, что код в новых версиях выполняется всё равно в неуправляемом пространстве, а .Net библиотеки - лишь обёртки для него. Иначе использование новых версий для тех, кто ждёт быстродействия, бессмысленно. Это ещё одна причина, по которой я использую старую библиотеку.
0
|
|
|
|
|
| 02.09.2013, 15:09 | |
|
А вот и новая книжка Смоленцева. Посмотрим что там можно сделать. Мне интересна та часть, где описано программирование под .Net. По идее на C# программировать должно быть проще, чем на C++, но, если вычисления выполняются в управляемом пространстве, то они будут медленнее в несколько раз, чем те же в неуправляемом.
Что касается MCR, если там нет какой-то хитрой регистрации, должно быть достаточно положить рядом с программой те dll, которые она требует. Для этого нужно установить MCR, скопировать куда-нить его файлы, а потом удалить его из системы. Ну, а далее нужно подсовывать программе dll'ки, пока она не заработает. Это упрощённый подход такой. Тут ещё нужно отделять понятия "программы". Программа может быть как приложение, написанное на C#, и как "обработчик" m-файла. Второй случай сложнее.
0
|
|
|
0 / 0 / 1
Регистрация: 23.07.2013
Сообщений: 36
|
|
| 02.09.2013, 18:11 | |
|
И звени пожалуйста, может очень глупый вопрос.
А для MATLAB R2013a. Делать так как ты показал на инструкции?
0
|
|
|
|
|
| 02.09.2013, 18:28 [ТС] | |
|
Тут всё очень просто на самом деле, в случаи Уни, он уменьшал объём своей программы подключением отдельных функций Матлаб в свой сишный код, не ставя громоздкий MCR.Для 2013a попробуй сначала сделать, как я описал в начальном сообщение темы, с новыми библиотеками уни такие же операции пока не делал...
0
|
|
|
0 / 0 / 1
Регистрация: 23.07.2013
Сообщений: 36
|
|
| 03.09.2013, 23:26 | |
|
Попробую, спасибо.
0
|
|
|
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 47
|
|
| 01.10.2013, 20:51 | |
|
Зосима,lomt, вот в программе строчка есть "msgbox({Answer1,Answer2,Answer3},'Ответ ');"
можно как-нибудь вместо текста чтобы выводился график через plot()?? чтобы после конвертирование в exe файл,после введения данных и вычисления выводился график?
0
|
|
|
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 15
|
|
| 06.10.2013, 12:55 | |
|
Хотелось бы ещё раз задать вопрос Уни. Я скомпилировал m-файл в программе Matlab 6.5, получил .exe файл. Он прекрасно работает. На системе, где не установлен Matlab я его запустил, стал добавлять, согласно выведенному сообщению, необходимые .dll файлы. Добавил их штук 15-20. Затем, когда добавил все dll-ки, при вызове полученной независимой программе DOS-окно стало схлопываться, т.е. открываться на доли секунды и закрываться. Но с помощью программы Camtasia я расшифровал надпись на схлопывающемся окне и понял, что программа запрашивает ещё файлы license.dat и demo.lic. Файл license.dat в Matlab я нашёл. А demo.lic не смог найти. На этом всё и закончилось. Не могли бы подсказать, что далее можно было бы сделать здесь?
0
|
|
|
|
|
| 06.10.2013, 13:26 | |
|
Для начала, нужно проверить будет ли работать программа с RTL библиотекой Matlab 6.5. Для этого на целевом компьютере нужно установить Matlab C++ Math and Graphics Run Time Library 2.1. Дистрибутив идёт вместе с Matlab 6.5 в папке C:\MATLAB6p5\extern\lib\win32. Файл: mglinstaller.exe (~8.5 Мб).
Этот файл нужно скопировать на целевой компьютер и запустить там. Библиотеку нужно установить по какому-то пути, например, на диск C:\MATLAB6p5\. Установщик выводит приглашение с комментариями. После этого, как написано в комментариях, нужно добавить в системную переменную path целевого компьютера папку C:\MATLAB6p5\bin (или C:\MATLAB6p5\bin\win32, я уже не помню). Вот теперь можно запускать вашу программу. Она найдёт RTL библиотеку по пути в переменной path. Это стандартный вариант, который предлагает MathWorks. Есть второй вариант, когда эту библиотеку можно расположить рядом с программой. Он немного сложнее. Попробуйте сначала стандартный путь, а потом я расскажу, если нужно, как можно обойти лишние телодвижения.
1
|
|
|
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 15
|
|
| 06.10.2013, 13:45 | |
|
Спасибо, Уни. Но с mglinstaller мне всё понятно. Просто я хотел чисто версию portable из m-файла сделать, т.е. без mglinstaller и mcrinstaller. Но видать это пока нереально. А может какие-нибудь есть портативные версии mglinstaller или mcrinstaller?
0
|
|
|
|
|
| 06.10.2013, 13:49 | |
|
Использование mglinstaller - это и есть портативность, просто нужно немножко подумать и разместить все файлы из пакета рядом в папке с программой. Вот и всё. При запуске программа обнаружит пакет по текущему пути и никаких других действий не нужно.
Сам этот пакет можно вставить архивом в ресурсы и распаковывать при запуске программы. Либо можно поискать программы, которые умеют это делать. Я сам не пользовался, но знаю, что есть программы, которые могут упаковать всё, что нужно, для создания портативной версии.
1
|
|
| 06.10.2013, 13:49 | |
|
Помогаю со студенческими работами здесь
60
Создание exe файла
Создание exe файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|