【发布时间】:2021-06-22 14:40:02
【问题描述】:
当我运行 32 位 Raspibian 时,我在 Raspberry Pi 3 上完美地运行了我的程序。这是一个Linux 5.10.33-v7+ #1 armv7l 系统。这些程序是在这个系统上用 C++ 编译的。如果我将可执行文件复制到具有该系统的另一张卡上,它就可以工作。
但是,当我使用Debian 4.19.181-1 aarch64 Linux 4.19.0.16-arm64 时,这些相同的可执行文件无法运行(我将编译后的文件复制并粘贴到另一个系统上)。
尝试运行时,它返回:
-bash: ./Myprogram: 没有这样的文件或目录。
如果我尝试使用bash Myprogram 运行,它会返回:
Myprogram:无法执行二进制文件
根据我的研究,这是一个不兼容的架构错误。
我已经尝试使用chmod 更改权限。
我认为 32 位文件应该在 64 位系统上工作。
“文件”命令返回:
ELF 32 位 LSB 可执行文件,ARM,EABI5 版本 1 (GNU/Linux), 动态链接,解释器 /lib/ld-linux-armhf.so.3,用于 GNU/Linux 3.2.0, BuildID[sha1]=ad484c860b63e0d8735c2b7aa5c69f2e49caaf29,与 debug_info,未剥离
非常感谢
我知道问题出在架构上。但是为什么同一个处理器(同一个树莓派)可以运行 armv7l 操作系统和 arm64 操作系统呢?兼容性如何工作?
为什么 raspberry 可以同时运行 arm64 操作系统和 armv7l 操作系统,但不能运行程序?
【问题讨论】:
-
@ChristianPastro 一个选项是在您的 Pi3 上安装 64 位操作系统,因为 Pi3 处理器是 64 位的。 32 位操作系统没有 64 位程序的指令。
标签: linux raspberry-pi arm raspberry-pi3 shellexecute