Не может выполнить двоичный файл
У меня есть двоичный исполняемый файл, который является частью академического программного пакета, который я скачал. Я не могу заставить его работать, и у меня нет доступа к исходному коду. Я пробовал следующие вещи. Какие-нибудь мысли?
Большое спасибо.
$ 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 для его запуска.