Почему я получаю ошибку с 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-каталог.
Заранее спасибо.