2014-12-04 69 views
0

我有一个MATLAB代码可以工作,但是当我将它转换成exe时,它给了我一个错误,说它找不到在该代码中运行的m文件。这是代码。独立的matlab exe不起作用

clear all 
str = sprintf('MyInput.txt'); 
fp = fopen(str,'r'); 
N= fscanf(fp,'%d',1)*2; 
for i=1:N 
    a=sprintf('phtoh0_%d',i); 
    b=sprintf('phtoh0_%d.mat',i); 
    run(a); 
    save(b) 
    clearvars -except N fp str 
end 

错误是phtoh0_1未找到。 任何帮助表示赞赏。

+0

你确定'phtoh0_1'与你的可执行文件在同一个文件夹中吗? – Hoki 2014-12-04 08:42:07

+0

是的,他们在同一个文件夹中。 – shweta 2014-12-04 11:55:24

回答

2

您无法使用run()有用编译的Matlab代码。因为它是一个动态调用,所以Matlab编译器不会看到你调用函数的依赖关系,所以它不会被编译。您需要将其更改为函数,并使用显式引用,编译器编译指示或编译器选项强制将其包含在编译代码中。然后用str2func而不是run作为常规函数。

即使您在编译好的exe文件所在的目录或cd所在的目录中获得了普通的Matlab phtoh0_1.m文件,编译后的Matlab程序将不会运行它,除非它包含在原始编译中。 Matlab组件运行时将拒绝运行非混淆的Matlab代码。

+0

如果我将phtoh_1.m转换为EXCEL文件并尝试使用xlsread从不同的目录中读取它,那么MATLAB代码也可以工作,但是exe不会与xlswrite在同一个程序中起作用。我不明白这个问题。 – shweta 2014-12-04 11:52:19