从Matlab运行的exe文件。 在cmd(dos)中完全相同的指令在Matlab中失败

我必须承认,这让我疯狂。 在能够成功地编译两个函数之后,我需要处理从可信赖的在线存储库(在Linux中已经过全面testing的代码)下载的C / C ++代码中的语音文件,现在我正努力从Matlab启动这些文件…

当我在cmd(dos)中键入以下命令时,分析b2.wav config_default起作用,没问题(请参阅这里的Works )。

然后,我build立完全相同的命令到一个string,并将其提供给“系统”Matlab函数。 然后代码崩溃…(见这里失败 )我已经尝试完整path(c:\ b2.wav等),但仍然无法正常工作…

任何想法,为什么这可能会发生?

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

这可能是很多原因,所以让我们一步一步来:

1)尝试执行从终端分析和传递错误的参数(一个文件不存在,只有一个参数(缺少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:在Matlab路径中添加Analysis.exe和目标所在的目录:(1)在主页选项卡的环境部分,单击设置路径。 在那里添加路径。 (2)addpath(folderName1,…,folderNameN)将指定的文件夹添加到当前MATLAB会话的搜索路径的顶部。 – >然后运行没有完整路径的系统命令。
  • 可能的解决方案2:将Analysis.exe和目标所在的目录添加到Windows环境路径中。 然后运行没有完整路径的系统命令。

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

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