-bash: ./my_file: невозможно выполнить двоичный файл: ошибка формата Exec, но моя архитектура и эльф совпадают

Я пытаюсь запустить двоичный файл на Odroid-C2 с ubuntu64-16.04.3-minimal-odroid-c2-20171005 OS. Этот файл имеет 777 привилегий и скомпилирован для ARM.

# ls -l my_file
-rwxrwxrwx 1 root root 136409 Sep 30 13:17 my_file

#pwd
/home

#file my_file
my_file: ELF 32-bit LSB executable, ARM, version 1, statically linked, not stripped

#uname -a
Linux odroid64 3.14.79-116 #1 SMP PREEMPT Tue Sep 26 01:19:06 BRT 2017 aarch64 aarch64 aarch64 GNU/Linux 

Когда я пытаюсь запустить его (./my_file), я получаю ошибку: -bash: ./my_file: не могу выполнить двоичный файл: ошибка формата Exec

Я знаю, что мой двоичный файл 32-битный, а мой Ubuntu 64-битный, поэтому я следовал этому руководству , чтобы добавить новую архитектуру. Это не помогло, такая же ошибка происходит.

Я также искал другие решения, но, похоже, единственная проблема, возникающая с этой ошибкой, - это несоответствующая архитектура. Я совершенно уверен, что это не моя проблема - эльф это ARM, так же как и Odroid. Раньше я запускал похожие двоичные файлы на этом Odroid, поэтому сейчас я в замешательстве.

Можете ли вы помочь мне найти мою ошибку?

1
задан 11 October 2019 в 08:01

1 ответ

ELF 32-bit LSB executable, ARM

Это - исполняемый файл ARM на 32 бита, разработанный для 32-разрядных сред инфраструктуры ARM (armhf, armel, arm64, когда у Вас есть ARM на 32 бита, освобождает)

aarch64

, Вашей архитектурой является 64-разрядный ARM. А именно, aarch64 микросхемы ТОЛЬКО поддерживают систему команд ARMv8 A64, и не делают поддержка системы команд времени выполнения A/T32 как этот двоичный файл потребности <глоток> 1 .

, Таким образом, жалоба системы на самом деле допустима - 32-разрядный исполняемый файл ARM имеет недопустимый заголовок ELF для 64-разрядного aarch64 среда, которая не может выполнить системы команд A/T32.

<час>

<глоток> 1 Гипотеза, основанная на https://en.wikichip.org/wiki/arm/aarch64, который указывает:

режим выполнения AArch64 был начат с ARMv8 ISA для машин, выполняющих инструкции A64. Машина в AArch64 может только выполнить инструкции A64 и не может выполнить A32 или инструкции T32.

2
ответ дан 10 November 2019 в 10:03

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

Похожие вопросы: