从Matlab运行C可执行文件

问题描述:

我尝试在linux上运行matlab中的Sift特性描述符可执行文件的C实现。我运行该脚本,并在一些文件夹中的可执行文件和可执行文件是由以下从Matlab运行C可执行文件

./sift <tmp.pgm >tmp.key 

运行,我修整与以下Matlab的运行,但没有一次成功

eval('!./sift <tmp.pgm >tmp.key'); 
system('./sift <tmp.pgm >tmp.key'); 
unix('./sift <tmp.pgm >tmp.key'); 

我也查从终端的可执行文件,它没有任何缺陷的工作。有没有其他的方式来做到这一点或我有什么轻微的错误?

+1

你得到什么错误信息或意外的输出?尝试捕获返回状态和输出,例如'[status,output] = system(...)'。 – 2013-03-18 01:38:10

+0

没有任何错误,只获取-1作为状态。 – erogol 2013-03-18 05:38:06

我找出问题的路径/matlab/bin/glnxa64/matlab_helper有权限问题。检查完问题后,所有内容都开始正常工作。

您的语法看起来不错。

-1状态意味着它可能根本无法找到或启动sift。我知道这是基本的(我认为有人提到它),但是你的Matlab程序是从sift在调用它时所在的目录运行的吗? system()函数针对Matlab会话的当前目录评估路径,而不是调用脚本的位置。如果您的脚本因其他原因而调用cd,则会影响它。用pwd检查您的当前目录并执行lsexist('./sift', 'file')以确保它在那里。

如果出现这种情况,可以使用绝对路径调用sift,使其在运行时使用脚本中的fileparts(mfilename('fullpath'))进行计算,从而使其更加健壮。

+0

是的,我在同一条路径上运行,并且肯定不会在程序运行时更改工作空间路径 – erogol 2013-03-18 08:30:41

+1

下一个最可能的问题可能是环境变量问题,如路径或库加载路径,或可能是shell配置问题,因为Matlab可以影响这些。通过在'sift'为你工作的终端上执行'set> from_shell.txt'来检查环境,然后在Matlab中使用'system('set> from_matlab.txt')'并且'比较'看看Matlab是否在修改东西。 – 2013-03-18 16:16:53

+0

我想没有任何命令可以在我的Matlab上执行。我尝试了其他人,但没有回应只有-1的地位。 – erogol 2013-03-18 21:30:14

我有同样的权限问题。只是为别人添加解决方案,因为我很难找到解决方案。 打开终端并键入 cd \ path_of_your_file sudo chmod -R 777 它会询问你的密码并允许运行exe。拥抱..