2014-02-08 3 views
0

Я работаю над matlab R2013a на Ubuntu. Я имею в виду этот код:Ошибка Ubuntu: «filename» не может выполнить двоичный файл

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

Вам не хватает прямой косой черты перед 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-разрядные исполняемые файлы.

Из ваших комментариев я вижу, что вы пытаетесь запустить 64-битный исполняемый файл в 32-разрядной системе, который не способен это сделать. Вы должны найти 32-разрядную версию siftfeat или изменить свою ОС на 64-разрядную, если это возможно.

+0

все checked.but не удалось найти, где проблема. – sam

+0

Я пробовал все эти условия, для точечных вызовов это одна и та же ошибка, для выхода системы ('file/bin/ls') -/bin/ls: 32-разрядный исполняемый файл ELF 32 бит, Intel 80386, версия 1 (SYSV), динамически связан (использует общие библиотеки), для GNU/Linux 2.6.24, BuildID [sha1] = 0x83531f308f1fa18221be53eaf399303400c14638, stripped status1 = 0 – sam

+0

OUTPUT is: lib/sift/bin/siftfeat: ELF 64-разрядный исполняемый файл LSB, x86-64 , версия 1 (SYSV), динамически связанная (использует общие библиотеки), для GNU/Linux 2.6.15, BuildID [sha1] = 0x34f774d3c6d2665c2b811bbd78ddf6a37d437b7f, не разделяется status is 0 – sam

Смежные вопросы