2014-02-08 143 views
0

我在Ubuntu上的matlab R2013a上工作。我指的是這樣的代碼:Ubuntu的錯誤:「文件名」不能執行二進制文件

sift_bin = fullfile('lib/sift/bin/siftfeat'); 
[pf,nf,ef] = fileparts(filename); 
desc_file = [fullfile(pf,nf) '.txt']; 
im1=imread(filename); 
if (size(im1,1)<=1000 && size(im1,2)<=1000) 
    status1 = system([sift_bin ' -x -o ' desc_file ' ' filename]); 
else 
    status1 = system([sift_bin ' -d -x -o ' desc_file ' ' filename]); 
end 

但它給出了一個錯誤:

lib/sift/bin/siftfeat cannot execute binary file 

這有什麼不對的系統調用?

lib/sift/bin/siftfeat是一個sift庫的路徑。

+0

你是否在lib之前缺少一個正斜槓或者應該是相對路徑? –

+0

其相對路徑 – sam

+0

您是否下載了正確架構的二進制文件?如果你通過linux終端運行命令,你會得到同樣的錯誤嗎?我認爲這是一個二進制文件的問題,而不是你的matlab代碼。 – Daniel

回答

1

使用file實用程序來確保該文件是一個可執行文件,並查看其結構

system('file /bin/ls') 
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked 
(uses shared libs), for GNU/Linux 2.6.24, 
BuildID[sha1]=0xf31e99218b4d7034cf8257055686bca22f5a3c01, stripped 
ans = 0 

然後uname -a顯示系統

system('uname -a') 
Linux optiPlex7010 3.8.0-35-generiC#50-Ubuntu SMP Tue Dec 3 01:24:59 UTC 2013 
x86_64 x86_64 x86_64 GNU/Linux 
ans = 0 

的架構作爲一個可以看到我有64位Linux並且可執行文件也是64位的。但是,涉及到32位系統並且可執行支持是向後兼容的。這意味着64位系統可以執行32位和64位可執行文件,但32位系統只能執行32位可執行文件。

從您的意見,我看到你正試圖在32位系統中啓動64位可執行文件,這是不能做到這一點。您應該找到32位版本的siftfeat或將您的操作系統更改爲64位(如果可能的話)。

+0

在命令上運行時發出相同的錯誤,但都找不到問題所在。 – sam

+0

我嘗試了所有這些條件,對於點調用它是相同的錯誤,對於系統('文件/ bin/ls')輸出是 -/bin/ls:ELF 32位LSB可執行文件,Intel 80386,版本1(SYSV),動態鏈接(使用共享庫),用於GNU/Linux 2.6.24,BuildID [sha1] = 0x83531f308f1fa18221be53eaf399303400c14638,剝離 status1 = 0 – sam

+0

OUTPUT是:lib/sift/bin/siftfeat:ELF 64位LSB可執行文件,x86-64 ,版本1(SYSV),動態鏈接(使用共享庫),用於GNU/Linux 2.6.15,BuildID [sha1] = 0x34f774d3c6d2665c2b811bbd78ddf6a37d437b7f,未去除 狀態爲0 – sam

相關問題