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

如何在Arm64 macOS上用内置Clang交叉编译Linux ARM64汇编程序

在ARM64 macOS上用Clang交叉编译Linux ARM64汇编程序的方法

解决方案编译命令

直接使用带目标平台指定的Clang命令编译你的Linux版汇编代码:

clang --target=aarch64-linux-gnu hello.s -static -o hello-linux

命令参数说明

  • --target=aarch64-linux-gnu:明确告诉Clang将代码编译为ARM64架构的Linux可执行程序,这会让编译器和链接器适配Linux的系统调用约定、入口符号(_start)以及ELF文件格式规则。
  • -static:强制静态链接所有依赖,避免生成的二进制依赖Linux系统的动态库,确保在Docker容器中可以直接运行,无需额外安装库文件。

验证编译结果

  1. 检查生成的文件类型,确认是Linux ARM64格式:

    file hello-linux
    

    输出应类似:

    ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, with debug_info, not stripped
    
  2. 在ARM64 Linux Docker容器中运行测试:

    • 启动容器并挂载当前目录:
      docker run -it --rm -v $(pwd):/workdir arm64v8/ubuntu
      
    • 在容器内执行程序:
      cd /workdir && ./hello-linux
      

    此时会正常输出Hello World!

原错误原因解释

你之前直接用clang hello.s编译时,Clang默认使用macOS的目标平台(arm64-apple-darwin):

  • macOS平台的可执行程序入口符号是_main,而你的Linux代码使用的是Linux标准的_start入口,因此链接器找不到_main符号导致报错。
  • 同时,macOS和Linux的系统调用号、调用约定也存在差异,指定目标平台后才能正确适配这些规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:05:34