Почему я получаю ошибку с fopen при использовании mcc от matlab?

Установка: Windows 7 Enterprise. Matlab 7.10.0 (R2010a). компилятор mcc: Microsoft Visual C++ 2008 Express.

Что происходит: мой проект работает нормально при запуске через Matlab, но при попытке запустить.exe через командную строку после использования mcc для компиляции командная строка выдает ошибку. Я запускаю команду mcc:

mcc -m -v STARTUP1.m -o EXE_REDUC

Ошибка, которую я получаю в командной строке:

??? Error using ==> textscan
Invalid file identifier.  Use fopen to generate a valid file identifier.

У меня есть файл с именем LoadXLS.m, который загружает и читает файл.csv, используя:

fid = fopen(file,'r');
temp_data = textscan(fid,...args...);

И тогда я обрабатываю temp_data.

Файл CSV, который я пытаюсь загрузить, называется spec.csv. Он расположен в двух каталогах, где я храню STARTUP1.m. Расположение STARTUP1.m также является местом, в котором хранятся сгенерированные mcc файлы. Я использовал pathtool, чтобы "Добавить с подпапками" это местоположение, но я знаю, что эти места не переносятся в mbuild при компиляции.

Что я пробовал: Я вошел и добавил операторы print, чтобы напечатать значение fid, чтобы убедиться, что оно действительно. Когда я запускаю его в Matlab, он имеет допустимое значение, однако при запуске в командной строке он всегда возвращает недопустимое значение -1.

Я удалил все вызовы addpath(), я попытался добавить каталог STARTUP1.m в архив mcc ctf, используя:

mcc -m -v -a 'C:\Users\...path...\STARTUP1.m_location' STARTUP1.m -o EXE_REDUC;

Однако, когда я делаю это, я получаю другую ошибку при запуске в командной строке:

Cannot open CTF archive file
 'C:\...path...\AppData\Local\Temp\mathworks_tmp_7532_28296'
 or
 'C:\...path...\AppData\Local\Temp\mathworks_tmp_7532_28296.zip'
??? Undefined function or variable 'matlabrc'.

Чтобы исправить это, я попытался добавить прагму

%#function matlabrc

к началу STARTUP1.m, чтобы попытаться обеспечить его включение, но безуспешно.

Я также скопировал файл spec.csv в новый каталог в ctfroot и изменил

fid = fopen(...)

чтобы:

[tempFile, message] = fopen(fullfile(ctfroot, 'Added Config Files', ad.spec_file));

Сообщение:

message is:     No such file or directory

Цель: изменение порядка расположения файлов - это достаточный обходной путь, в то время как execuable запускается только на моем компьютере, однако идея состоит в том, чтобы взять это автономное решение и распространить его среди множества людей на разных компьютерах. Я хотел бы иметь возможность иметь верхнюю папку с файлом запуска и внутри этой папки, иметь столько подпапок, сколько требует пакет. Файл запуска должен иметь возможность доступа ко всем подпапкам и файлам в них по мере необходимости. Я прочитал кое-что о том, что на самом деле работает из "секретного места" на машине: http://matlab.wikia.com/wiki/FAQ

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

Дополнительная информация: Когда я помещаю файл spec.csv в тот же каталог, что и STARUTP1.m, он находит это нормально, используя mcc без опции -a 'path' и используя следующее в файле LoadXLS.m:

[tempFile, message] = fopen(ad.spec_file,'r');

Этот проект содержит графические интерфейсы, генерирует PDF, генерирует графики, а также создает zip-каталог.

Заранее спасибо.

0 ответов

Другие вопросы по тегам