2013-03-17 268 views
1

我嘗試在linux上運行matlab中的Sift特性描述符可執行文件的C實現。我運行該腳本,並在一些文件夾中的可執行文件和可執行文件是由以下從Matlab運行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

你得到什麼錯誤信息或意外的輸出?嘗試捕獲返回狀態和輸出,例如'[status,output] = system(...)'。 – 2013-03-18 01:38:10

+0

沒有任何錯誤,只獲取-1作爲狀態。 – erogol 2013-03-18 05:38:06

回答

1

我找出問題的路徑/matlab/bin/glnxa64/matlab_helper有權限問題。檢查完問題後,所有內容都開始正常工作。

2

您的語法看起來不錯。

-1狀態意味着它可能根本無法找到或啓動sift。我知道這是基本的(我認爲有人提到它),但是你的Matlab程序是從sift在調用它時所在的目錄運行的嗎? system()函數針對Matlab會話的當前目錄評估路徑,而不是調用腳本的位置。如果您的腳本因其他原因而調用cd,則會影響它。用pwd檢查您的當前目錄並執行lsexist('./sift', 'file')以確保它在那裏。

如果出現這種情況,可以使用絕對路徑調用sift,使其在運行時使用腳本中的fileparts(mfilename('fullpath'))進行計算,從而使其更加健壯。

+0

是的,我在同一條路徑上運行,並且肯定不會在程序運行時更改工作空間路徑 – erogol 2013-03-18 08:30:41

+1

下一個最可能的問題可能是環境變量問題,如路徑或庫加載路徑,或可能是shell配置問題,因爲Matlab可以影響這些。通過在'sift'爲你工作的終端上執行'set> from_shell.txt'來檢查環境,然後在Matlab中使用'system('set> from_matlab.txt')'並且'比較'看看Matlab是否在修改東西。 – 2013-03-18 16:16:53

+0

我想沒有任何命令可以在我的Matlab上執行。我嘗試了其他人,但沒有迴應只有-1的地位。 – erogol 2013-03-18 21:30:14

0

我有同樣的權限問題。只是爲別人添加解決方案,因爲我很難找到解決方案。 打開終端並鍵入 cd \ path_of_your_file sudo chmod -R 777 它會詢問你的密碼並允許運行exe。擁抱..