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 に答える