我尝试在 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');
我还从终端检查了可执行文件,它的工作没有任何缺陷。有没有其他方法可以做到这一点,或者我有什么小错误吗?
最佳答案
您的语法看起来正确。
-1
状态意味着它可能无法找到或启动 sift
根本不。我知道这是基本的(我认为其他人提到过它),但是您的 Matlab 程序是否从与 sift
相同的目录运行是在什么时候调用它? system()
函数评估相对于 Matlab session 当前目录的路径,而不是调用脚本的位置。如果您的脚本调用了 cd
由于其他原因,这会影响它。使用 pwd
检查当前目录并执行 ls
和exist('./sift', 'file')
以确保它在那里。
如果是这种情况,您可以通过调用 sift
使其更加健壮。具有绝对路径,可以在运行时使用 fileparts(mfilename('fullpath'))
计算在脚本中。
关于c - 从 Matlab 运行 C 可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15466442/