Не может выполнить двоичный файл

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

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

$ 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

2 ответа

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

$ ~/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 (если можете) - загрузите Ubuntu Desktop

Альтернативой для запуска 64-битного кода в 32-битной Linux является использование настоящего эмулятора процессора, такого как qemu / bochs - Bochs - OSDev Wiki, - с 64-битным образом Linux (или виртуальной машиной, такой как xen, если ваш процессор поддерживает это).

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

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

Обратите внимание на вывод вашего 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 для его запуска.

Другие вопросы по тегам