2013-08-02 4 views
4

У меня есть двоичный исполняемый файл, который является частью учебного программного пакета, который я загрузил. Кажется, я не могу запустить его, и у меня нет доступа к исходному коду. Я пробовал следующие вещи. Есть предположения?не может выполнить двоичный файл

Большое спасибо.

$ chmod +x random_cell 
$ ./random_cell 
-bash: ./random_cell: cannot execute binary file 
$ file random_cell 
random_cell: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.4, not stripped 
$ ldd random_cell 
random_cell: is not an object file 
$ uname -m 
x86_64 

ответ

0

Обратите внимание на вывод команды file:

ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked 
(uses shared libs), for GNU/Linux 2.6.4, not stripped 

Это говорит исполняемый вы пытаетесь запустить, скомпилированные для архитектуры x86-64 . Если вы используете 32-разрядную операционную систему, которая не будет работать, если вы не перекомпилируете ее для 32-разрядной.

Поскольку у вас нет исходного кода, я думаю, проще всего было бы использовать 64-битную систему Linux для ее запуска.

+0

Как сказать, если я под управлением операционной системы 32 битную? Я думаю, что я должен быть на 64 бит, но я был бы счастлив проверить, чтобы быть уверенным. – user1473883

+0

Используйте эту команду: 'uname -a' и разместите здесь свой вывод – Claudio

+0

Oh .. wait. Теперь я вижу, что вы использовали 'uname -m', и он вернулся, это действительно 64-битная система: x86_64. Вы уверены, что вы установите бит выполнения на random_cell? Он принадлежал вашему пользователю? – Claudio

1

Я столкнулся с той же проблемой, и это ответ, который я придумал

$ ~/opt/Linux-3.11.0-i686/svn/bin/svn --version 
-bash: /home/fennellb/opt/Linux-3.11.0-i686/svn/bin/svn: cannot execute binary file 

$ file ~/opt/Linux-3.11.0-i686/svn/bin/svn 
/home/fennellb/opt/Linux-3.11.0-i686/svn/bin/svn: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, BuildID[sha1]=0x6b38ac5ac15af4334712b9bacc6646cabaefde9a, not stripped 

$ find /bin /usr/bin -maxdepth 1 -type f -print0 | 
     xargs -0 file | 
     awk 'BEGIN   {c32=0;c64=0} 
      /ELF 64-bit/ {c64++} 
      /ELF 32-bit/ {c32++} 
      END    {print "ELF 32-bit count "c32; 
           print "ELF 64-bit count "c64}' 

ELF 32-bit count 1639 
ELF 64-bit count 0 

Ну ... что объясняет его!

Возможные решения: проверьте, чтобы увидеть, если ваш процессор поддерживает 64-битный Linux:

$ cat /proc/cpuinfo | egrep '^(model name|cpu MH|vend)' 
cpu MHz   : 1200.000 
model name  : Intel(R) Pentium(R) Dual CPU E2140 @ 1.60GHz 
vendor_id  : GenuineIntel 

(то Google точное название процессора, чтобы найти его спецификации)

Затем перейти на 64-битной Linux (если можно) - Download Ubuntu Desktop

Одна альтернатива для запуска 64-битного кода на 32-битной Linux является использование истинного процессора эмулятор, как в Qemu/Bochs - Bochs - OSDev Wiki - с 64-битной Linux изображение (или VM, как Xen если ваш процессор поддерживает его).

Другое - попросить вашего поставщика программного обеспечения перекомпилировать 32-разрядную версию.

(Для меня я буду пересобрать из исходников.)

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