我正在尝试使用ubuntu64-16.04.3-minimal-odroid-c2-20171005
操作系统在 Odroid-C2 上运行二进制文件。该文件有 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: cannot execute binary file:Exec format error
我知道我的二进制文件是 32 位的,而我的 Ubuntu 是 64 位的,所以我按照本教程添加了新架构。这没有帮助,正在发生同样的错误。
我还搜索了另一种解决方案,但似乎出现此错误的唯一问题是架构不匹配。我很确定这不是我的问题——elf 是 ARM,Odroid 也是。我以前在这个 Odroid 上运行过类似的二进制文件,所以我现在真的很困惑。
你能帮我找出我的错误吗?
这是一个 32 位 ARM 可执行文件,专为 32 位 ARM 基础架构环境(当您拥有 32 位 ARM 库时为 armhf、armel、arm64)而设计
您的架构是 64 位 ARM。具体来说,
aarch64
芯片只支持ARMv8 A64指令集,不支持像这个二进制需要的A/T32运行时指令集1。aarch64
所以系统的抱怨实际上是有效的 - 32 位 ARM 可执行文件对于无法执行 A/T32 指令集的 64 位环境具有无效的 ELF 标头。1 基于https://en.wikichip.org/wiki/arm/aarch64的假设,该假设指出: