2

我尝试在 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');

我还从终端检查了可执行文件,它没有任何缺陷。有没有其他方法可以做到这一点,或者我有什么小错误吗?

4

3 回答 3

2

您的语法看起来正确。

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

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

于 2013-03-18T05:54:54.977 回答
1

我发现问题是路径/matlab/bin/glnxa64/matlab_helper有权限问题。在我检查问题后,一切都开始正常工作。

于 2013-03-18T22:33:58.343 回答
0

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

于 2014-05-21T18:52:02.770 回答