我正在使用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是一个筛选库的路径。
答案 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位(如果可能的话)。