【问题标题】:Raspberry Pi 3: Running arm32 programs on an arm64 system树莓派 3:在 arm64 系统上运行 arm32 程序
【发布时间】: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


【解决方案1】:

这不仅仅是 32 位或 64 位的问题。 你是两种不同的架构,为了让你的程序工作你别无选择,你必须为这个架构重新编译它。

如果你想实现可移植性,你可以使用“Make”之类的系统。

【讨论】:

    猜你喜欢
    • 2021-01-14
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    相关资源
    最近更新 更多