我尝试在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');
我还从终端检查可执行文件,它没有任何缺陷。有没有其他方法可以做到这一点还是我有任何轻微的错误?
答案 0 :(得分:2)
您的语法看起来正确。
-1
状态意味着它可能根本无法找到或启动sift
。我知道这是基本的(我认为有人提到过它),但是你的Matlab程序是在sift
调用它的同一目录下运行的吗? system()
函数根据Matlab会话的当前目录评估路径,而不是调用脚本的位置。如果您的脚本因其他原因调用cd
,则会影响它。使用pwd
检查您当前的目录,并执行ls
和exist('./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。拥抱..