Ubuntu错误:“filename”无法执行二进制文件

时间:2014-02-08 10:56:59

标签: matlab ubuntu sift

我正在使用Ubuntu上的matlab R2013a。我指的是这段代码:

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是一个筛选库的路径。

1 个答案:

答案 0 :(得分: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位(如果可能的话)。