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

2020款MacBook Pro运行ARM64脚本遇exec format error问题求助

解决macOS ARM64上汇编程序的exec format error问题

问题根源

你用aarch64-elf-as和aarch64-elf-ld编译生成的是ELF格式的ARM64可执行文件,而macOS(包括Sonoma 14.0)使用Mach-O格式作为可执行文件标准,两者格式不兼容,因此触发zsh: exec format error。另外你编写的汇编代码采用的是Linux/System V的系统调用号和入口点规则,也不符合macOS的运行规范。

解决方案

1. 使用macOS原生工具链编译

macOS自带的Clang/LLVM工具链可直接生成兼容的Mach-O格式可执行文件,步骤如下:

第一步:修改汇编代码适配macOS ARM64

替换原代码为以下内容(调整入口点和系统调用规则):

.global _main

.section .data
hello_message:
    .asciz "Hello, World!\n"

.section .text
_main:
    // 系统调用:write(1, hello_message, 13)
    mov x0, #1                  // stdout文件描述符
    ldr x1, =hello_message      // 字符串地址
    mov x2, #13                 // 字符串长度(含换行符)
    mov x16, #4                 // macOS ARM64系统调用号:write(实际对应0x2000004)
    svc #0x80                   // 触发系统调用

    // 系统调用:exit(0)
    mov x0, #0                  // 退出码0
    mov x16, #1                 // macOS ARM64系统调用号:exit(实际对应0x2000001)
    svc #0x80

第二步:编译链接

执行以下命令生成可执行文件:

clang -arch arm64 hello.s -o hello

第三步:运行程序

./hello

此时会正常输出Hello, World!。

2. 手动用汇编器和链接器构建(进阶)

如果想拆分汇编和链接步骤,使用macOS自带的as和ld工具:

# 汇编生成目标文件
as -arch arm64 hello.s -o hello.o
# 链接生成可执行文件,指定入口点并链接系统库
ld -arch arm64 -e _main -o hello hello.o -lSystem

验证格式

运行file hello,正确结果应为:

hello: Mach-O 64-bit executable arm64

内容的提问来源于stack exchange,提问作者stang-Spitfire1975

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 11:25:22