设置: Windows 7企业版。 Matlab 7.10.0(R2010a)。 mcc编译器:Microsoft Visual C ++ 2008 Express。
发生了什么: 我的项目在通过Matlab运行时运行正常,但是在使用mcc编译后尝试通过命令提示符运行.exe时,命令提示符会生成错误。 我发出的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'.
要解决此问题,我已尝试添加pragma
%#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
目的: 重新排列文件位置是一个充分的解决方法,而exectuable只能在我的计算机上运行,但是我们的想法是将它独立并分发给许多不同计算机上的多个人。我希望能够有一个带有启动文件的顶级文件夹,并且在此文件夹中,包含所需的子文件夹数量。启动文件应该能够根据需要访问其中的所有子文件夹和文件。 我在这里阅读了关于机器上“秘密位置”实际运行的exectuable:http://matlab.wikia.com/wiki/FAQ
我希望能够将整个文件夹树及其所有文件组合到一个包含可执行文件的包中,并且能够在任何地方运行它。
更多信息: 当我将spec.csv文件放在与STARUTP1.m相同的目录中时,它会使用没有-a'path'选项的mcc并在LoadXLS.m文件中使用以下内容来查找它:
[tempFile, message] = fopen(ad.spec_file,'r');
此项目包含GUI,生成PDF,生成绘图,还可以创建zip目录。
提前谢谢。