You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM汇编程序执行报错:cannot execute: required file not found求助

解决树莓派400 64位系统上ARM汇编程序无法执行的问题

问题根源

你使用的arm-linux-gnueabi-*工具链是针对32位ARM(armhf/armel)架构的交叉编译工具,生成的是32位ELF可执行文件。而树莓派400搭载的是64位ARM(AArch64)系统,默认未预装32位程序运行所需的兼容库,因此直接运行32位程序会出现文件找不到的错误。

可以用以下命令验证生成的程序架构:

file hello

如果输出包含ELF 32-bit LSB executable, ARM,则确认是32位程序。

解决方案

有两种可行的解决方式,根据你的需求选择:

方式一:安装32位兼容库,运行32位程序

如果想继续使用教程中的32位汇编代码,只需安装树莓派64位系统的32位兼容库:

  1. 添加32位架构支持:
    sudo dpkg --add-architecture armhf
    
  2. 更新软件源并安装32位C库:
    sudo apt update && sudo apt install libc6:armhf
    

安装完成后,重新运行./hello即可执行32位程序。

方式二:改用64位ARM(AArch64)工具链与汇编代码

树莓派400原生支持64位程序,推荐使用64位工具链和对应汇编指令:

  1. 安装64位ARM交叉编译工具链(本地编译也可直接用系统默认的gcc/as):
    sudo apt install gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu
    
  2. 修改汇编代码为AArch64架构版本(指令和系统调用号与32位不同):
    .global _start
    .section .text
    _start:
            mov x0, #42          // 退出状态码(对应32位的r0)
            mov x8, #93          // AArch64架构下exit系统调用号为93(32位为1)
            svc #0               // 触发系统调用(对应32位的swi)
    
  3. 编译生成64位可执行文件:
    # 使用交叉工具链
    aarch64-linux-gnu-as hello.s -o hello.o
    aarch64-linux-gnu-gcc hello.o -o hello -nostdlib
    
    # 或本地原生编译(树莓派400自带64位工具链)
    as hello.s -o hello.o
    gcc hello.o -o hello -nostdlib
    
  4. 运行程序:
    ./hello
    

执行后可以用echo $?查看退出状态码,会输出42,验证程序正常运行。

内容的提问来源于stack exchange,提问作者MaaaaathiiiiiiiiiiEU

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 06:05:05