2016-01-15 4 views
0

Я пытаюсь скомпилировать функцию Matlab с помощью функции mcc. Моя функция записывает текст в файл.mcc, производящий безответный исполняемый файл

function hello() 
    ofid = fopen('hello.txt','w'); 
    fprintf(ofid, 'Hello there, this is matlab.\n'); 
    fclose(ofid); 
end 

Выполняется, как ожидается, при вызове с консоли Matlab. Однако, когда я скомпилировать файл в исполняемый файл, используя mcc

/opt/matlab/matlab2008a/bin/mcc -m hello.m 

и запустить его как

./hello 

Это, кажется, бежит навсегда и не производит hello.txt файла. И исполняемый файл, и файлы функций Matlab находятся в рабочем каталоге Matlab.

Я не могу видеть, что может быть неправильным в моем использовании mcc. Пожалуйста помоги.

+0

Создает ли файл? – Dan

+0

Нет, запуск исполняемого файла, похоже, ничего не делает. Он не создает файл, и он не завершается. –

+0

Когда вы запустите hello(); он создает необходимый файл. Почему вы хотите запустить его через/opt/matlab/matlab2008a/bin/mcc -m hello.m? просто запустите hello(); – Dan

ответ

1

Как правило, при выполнении mcc-скомпилированных приложений вам необходимо настроить среду выполнения MATLAB.

Вы, вероятно, получите больше пробега в первый раз, используя deploytool (из командной строки), чтобы скомпилировать вашу программу hello.m здесь. Создатель приложения MATLAB создаст файл run_hello.sh, который вы можете просмотреть, чтобы узнать, как они настраивают свои библиотеки. Затем, чтобы выполнить свою программу вы на самом деле назвать это так:

./run_hello.sh/Применение/MATLAB/MATLAB_Runtime/v90/

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

+0

Спасибо за ваш ответ и рассказываю о 'deploytool', похоже, он почти решает проблему, за исключением того, что когда я создаю свой проект с помощью' deploytool', он, кажется, помещает исполняемый файл (и файл .sh, который вы упомянули) внутри путь к папке: hello/distrib /. В идеале я хотел бы иметь исполняемый файл в той же папке, что и функция Matlab. Однако это не очень важно. Лучше ли использовать файл run_hello.sh, как вы сказали, вместо того, чтобы запускать исполняемый файл как: ./hello? –

+0

Есть ли способ заставить 'deplytool' выводить исполняемый файл и/или файл run_hello.sh в тот же каталог, что и основная функция Matlab? Вместо структуры папок ... –

+0

@Pavithran Да, вы можете изменить, где создаются файлы распространения, путем настройки параметров упаковки, найденных с помощью «deploytool». Я предполагаю, что все равно будет проще просто скопировать файлы, когда вы закончите. См. Эту ссылку http://www.mathworks.com/help/compiler/create-and-install-a-standalone-application-from-matlab-code.html (шаг 7), как изменить все это. То, как вы расширяете эти последующие комментарии, мне интересно, не лучше ли вам писать свой метод на C и скомпилировать его с помощью «mex» для запуска из MATLAB. – informaton