从Matlab运行C可执行文件

时间:2013-03-17 21:29:23

标签: c linux matlab executable

我尝试在linux下从matlab运行Sift特性描述符可执行文件的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');

我还从终端检查可执行文件,它没有任何缺陷。有没有其他方法可以做到这一点还是我有任何轻微的错误?

3 个答案:

答案 0 :(得分:2)

您的语法看起来正确。

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

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

答案 1 :(得分:1)

我找出了问题,因为路径/matlab/bin/glnxa64/matlab_helper有权限问题。检查问题后,一切都开始正常工作。

答案 2 :(得分:0)

我有同样的许可问题。只是为其他人添加解决方案,因为我很难找到解决方案。 打开终端并输入 cd \ path_of_your_file sudo chmod -R 777 它将要求您输入密码并允许运行exe。拥抱..