Setup: Windows 7企业版 . Matlab 7.10.0(R2010a) . mcc编译器:Microsoft Visual C 2008 Express .

What's happening: 我的项目在通过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 .

What I've Tried: 我已经进入并添加了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

Objective: 重新排列文件位置是一个充分的解决方法,而exectuable只在我的计算机上运行,但是我们的想法是将它独立并分发给许多不同计算机上的多个人 . 我希望能够有一个带有启动文件的顶级文件夹,并且在此文件夹中,包含所需的子文件夹数量 . 启动文件应该能够根据需要访问其中的所有子文件夹和文件 . 我在这里阅读了关于机器上"secret location"实际运行的exectuable的一些内容:http://matlab.wikia.com/wiki/FAQ

我只想将一个整个文件夹树及其所有文件组合到一个包含可执行文件的包中,并能够在任何地方运行它 .

More info: 当我将spec.csv文件放在与STARUTP1.m相同的目录中时,它使用mcc而不使用-a 'path'选项并在LoadXLS.m文件中使用以下内容时发现它很好:

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

该项目包含GUI,生成PDF,生成绘图,还可以创建zip目录 .

先感谢您 .