我正在尝试使用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 格式错误
我知道我的二进制文件是 32 位的,而我的 Ubuntu 是 64 位的,所以我按照本教程添加了新的架构。这没有帮助,发生了同样的错误。
我还搜索了另一种解决方案,但似乎此错误发生的唯一问题是架构不匹配。我很确定这不是我的问题 - elf 是 ARM,Odroid 也是。我以前在这个Odroid上运行过类似的二进制文件,所以我现在真的很困惑。
你能帮我找出我的错误吗?
ELF 32-bit LSB executable, ARM
这是一个 32 位 ARM 可执行文件,专为 32 位 ARM 基础架构环境(armhf、armel、arm64,当您拥有 32 位 ARM 库时)而设计
aarch64
您的架构是 64 位 ARM。具体来说,aarch64
芯片只支持ARMv8 A64指令集,不支持像这个二进制需要1的A/T32运行时指令集。
所以系统的抱怨实际上是有效的 - 32 位 ARM 可执行文件对于aarch64
无法执行 A/T32 指令集的 64 位环境具有无效的 ELF 标头。
1基于https://en.wikichip.org/wiki/arm/aarch64 的假设,其中指出:
AArch64 执行状态是随 ARMv8 ISA 引入的,用于执行 A64 指令的机器。AArch64 中的机器只能执行 A64 指令,不能执行 A32 或 T32 指令。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句