2016-05-04 4 views
2

РедактироватьMATLAB Coder привет мир от начала до конца

После прохождения этого много усилий только для получения неисправных .exe файлов, которые есть решила не тратить больше времени на то, чтобы сгенерировать код и вместо того, чтобы написать его сам. Спасибо всем за ваше время.

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

TL; DR вопрос

Я экспортировали C++ код из MATLAB с MATLAB Coder, как его скомпилировать?

Полный вопрос

Использование Matlab App "MATLAB Coder" вы можете скомпилировать MATLAB код в код C++. Я знаю некоторые шаги, но не все из них, и после некоторого обширного поиска в Google я нашел ответы и не смог. Давайте работать вместе и объединять информацию. Я намерен структурировать этот вопрос в качестве руководства.

Это программа MATLAB мы хотим, как C++ код:

disp('Hello World') 

0. Переписывая:

Во-первых, MATLAB Coder нуждается в функции и .m файл запуска функции , Код был переписан, как один файл с именем HelloWorld.m

function [] = Helloworld() 
    disp('Hello World') 
end 

И еще один файл с именем ScriptHelloWorld.m, который содержит:

HelloWorld(); 

1. Запуск MATLAB Coder

Программа довольно проста, как только вы ее найдете. Он находится в «Приложениях», а затем вы можете запустить MATLAB Coder. Это включено в MATLAB 2015 и далее. После запуска вы выбираете файл, который хотите запустить, а затем вы выбираете файл, который его запускает. Здесь нет проблем, так как они оба очень простые файлы. Мы решили назвать проект «HejWorld».

2. Получение файлов

Это где информация не столь однозначна больше. Все файлы попадут в папку по вашему выбору, и, возможно, все они важны.Это то, что структура файла выглядит следующим образом:

Compiled data file structure

С внутренней Lib, глядя, как это:

Inside of lib folder

и внутри Mex, глядя, как это:

Inside of mex file

3. Компиляция

Здесь я не знаю. Нужно просто скомпилировать файлы, но это не простая задача. Я нашел where the makefile is в codegen/lib/HelloWorld/HelloWorld_rtw.mk, но может быть больше make-файлов, потому что я не уверен, что строить.

Также есть файл .prj, расположенный в корне, HelloWorld.prj, как видно на первом снимке экрана. Я не могу найти способ запустить это с помощью gcc или любого другого приложения.

Спасибо вам за помощь!

ответ

1

Вам нужны все файлы под lib/Helloworld. Если вы вызываете makefile Helloworld_rtw.mk в этом каталоге из своей оболочки, он должен создать библиотеку Helloworld.so на платформах unix и Helloworld.lib на окнах.

gmake -f Helloworld_rtw.mk build 

Вы можете связать свой код с этой библиотекой, чтобы вызвать главную функцию Helloworld в этой библиотеке. Пример main.c с вызовом Helloworld помещается в каталог примеров. Вы должны скомпилировать этот пример в исполняемый файл после добавления библиотеки Helloworld в качестве опции компоновщика и включить пути для заголовков.

Чтобы увидеть, как он работает вместо вызова disp в вашем коде, вы можете выполнить некоторую простую арифметику, как показано ниже. Это связано с тем, что disp не генерирует никакого кода для цели lib.

function [y] = Helloworld(u) 
    y = 2*u; 
end 

В ScriptHellowWorld.m

Helloworld(2); 

Вы можете вручную добавить PRINTF заявления в вашей копии основной функции после вызова функции HelloWorld.

+0

Привет! Извините, что не отвечал ранее. Я пытался сделать тремя способами, но никто не работает. Тот, который вы предложили, gmake, просто дает команду «не найден», но я читал, что xcode устанавливает gmake как раз make. Выполнение make -f Helloworld_rtw.mk build дает «шаблон цели не содержит'% ». Стоп.". Я также пытался использовать gcc, но это не работает. – Rkey

+0

@Rkey gmake устанавливается вместе с MATLAB: то есть в моей системе: '/ usr/local/MATLAB/R2014a/bin/glnxa64/gmake' – xvan

+0

В моем/usr/local/и/Applications/MATLAB нет папки MATLAB/MATLAB_R_2015b.app/bin/ нет glnxa64. Может ли этот путь быть для окон или ubuntu, возможно? – Rkey

1

Если вы планируете скомпилировать код для того же компьютера, на котором вы используете MATLAB или один с совместимой архитектурой, вы можете просто позволить MATLAB Coder сделать компиляцию для вас. Скажем, вы хотите статическую библиотеку. Затем выберите это из выпадающего списка Build Type и убедитесь, что Generate Code Only не установлен. См. Документацию для screenshot.

После завершения формирования кода MATLAB Coder скомпилирует код для создания статической библиотеки в codegen/lib/Helloworld.

+0

Да, это именно то, что я хочу! Однако, запустив это, я получил сообщение об ошибке. Ошибка: «Не удалось создать все двоичные выходы», и самая интересная строка, которую я могу найти в журнале сборки, - это «неопределенная ссылка на« WinMain ». Я придумываю это, просто давая вам знать, что произошло. – Rkey

+0

Вы выбрали «Исполняемый файл» в разделе «Тип сборки»? Если это так, компоновщик жалуется, что не может найти функцию 'main'. Для тестирования просто измените «Тип сборки» на «Статическая библиотека» или «Динамическая библиотека», и код будет скомпилирован. Если вы хотите выполнить исполняемый файл, вам нужно указать файл C, содержащий вашу основную функцию. [В этом примере] (http://www.mathworks.com/help/coder/ug/standalone-c-c-executables-from-matlab-code.html#bswnwkz-1) показано, как это сделать. –

+0

Выполняя это, мы достигаем ситуации, близкой к тому, с чего мы начали. Мы получаем c-код, но у нас нет возможности его скомпилировать. По крайней мере, я не знаю, как его скомпилировать. – Rkey

Смежные вопросы