繁体   English   中英

从Matlab运行exe代码。 Matlab中使用cmd(dos)的完全相同的指令失败

[英]Running exe code from Matlab. The exact same instruction that works in cmd (dos) fails from Matlab

我必须承认,这让我发疯。 在最终能够成功编译我需要处理的语音文件的两个功能之后,我需要从可信赖的在线存储库下载的C / C ++代码(已在Linux中进行了彻底测试的代码)中,现在我正努力从Matlab启动这些文件...

当我在cmd(dos)Analysis b2.wav config_default中键入以下命令时,它可以工作,没问题(请参见此处Works )。

然后,我将完全相同的命令构建到字符串中,并将其提供给“系统” Matlab函数。 然后代码崩溃...(请参阅此处失败 )我尝试使用完整路径(c:\\ b2.wav等),但仍然无法正常工作...

关于为什么会发生这种情况的任何想法?

您的图像显示程序Analysis意外停止。

原因可能有很多,所以让我们逐步进行:

1)尝试从终端执行Analysis并传递错误的参数(不存在的文件,只有一个参数(缺少config_defalut),根本没有参数,三个参数,等等。)

您可以通过传递错误的参数使程序从终端崩溃吗?

2)首先尝试创建命令,检查命令是否正确(\\ b实际上是\\ b而不是字符串修饰符)

command_to_be_run = 'C:\Analysis C:\b2.wav C:\config_default'
disp(command_to_be_run)     % is it showing exacly what you want?
system(command_to_be_run);  % if so, run it.

3)尝试在C中创建一个虚拟可执行文件dummy.exe,该文件接受两个参数并打印接收到的参数(使其保持超级简单,仅打印)。 从终端调用它。 它行得通吗? 从Matlba调用它。 能行吗

通过这3个测试,您可以大大缩小错误的出处。

顺便说一句,“ config_default”是一个文件还是一个告诉分析如何运行的字符串? 在某些示例中,您将其视为文件,在其他示例中,则将其视为不带路径的参数。

根据到目前为止的尝试和输出,这是我的理论:

  • 前提:Analysis.exe来自经过Linux良好测试的代码。 从它和目标文件所在的目录运行时,它可以在Windows命令行中运行。 但是它从Matlab控制台停止工作。
  • 断言1:Matlab控制台不在二进制文件所在目录的上下文中运行,而是在Matlab目录中运行。 因此,Analysis.exe将尝试从Matlab目录中查找目标。
  • 声明1的验证:尝试将二进制文件和目标wav放在Matlab目录中。 然后使用仅按名称(无路径)指定的二进制文件和目标文件运行系统。
  • 断言2:如果已指定文件的完整路径来解决此问题,则该文件仍然不起作用。 这可能是因为代码假定Linux文件系统中的定界符为“ /”而不是“ \\”。
  • 断言2的验证:在其他目录中,使用从命令行指定的路径运行,以查看其是否失败。
  • 可能的解决方案1:将Analysis.exe和目标所在的目录添加到Matlab路径中:(1)在“主页”选项卡上的“环境”部分中,单击“设置路径”。 在此处添加路径。 (2)addpath(folderName1,...,folderNameN)将指定的文件夹添加到当前MATLAB会话的搜索路径的顶部。 ->然后运行没有完整路径的系统命令。
  • 可能的解决方案2:将Analysis.exe和目标所在的目录添加到Windows环境路径中。 然后在没有完整路径的情况下运行系统命令。

编辑:可能的黑客解决方案-创建一个批处理文件,其中:(1)您将CD到Analysis.exe和目标wav所在的目录; (2)对批处理文件进行Matlab系统调用。

编辑2:可能的实验来验证断言2。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM