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

MacOS下带strip参数编译的Rust二进制无法运行:Mach-O异常求助

问题:MacOS Ventura 13.0.1(M1 Max)下Rust编译剥离符号后二进制变32位Mach-O导致运行失败

根本原因

核心是Ventura 13.0.1自带的GNU strip工具(包括rustc默认调用的strip)存在ARM64 Mach-O处理bug:它错误地把64位Mach-O的magic值从0xfeedfacf(ARM64 64位标识)改成了0xfeedface(32位Mach-O标识),系统识别为无效32位程序,直接触发Killed:9错误。

  • Rust的-C strip=symbols参数默认调用系统strip,所以编译后出问题;
  • 换zld/mold链接器没用,因为问题出在符号剥离环节,不是链接环节;
  • Monterey系统的GNU strip已经修复了这个bug,所以同操作在M1 Pro+Monterey上能正常运行。

解决办法

1. 用llvm-strip替代默认strip

两种方式:

  • 编译时直接指定用llvm-strip处理:
    rustc main.rs -o main_stripped -C strip=symbols -C llvm-args=-strip-all
    
  • 先编译正常二进制,再用llvm-strip剥离符号:
    rustc main.rs -o main
    llvm-strip -S main -o main_stripped
    

2. 更新Rust到最新稳定版

新版本Rust已经默认适配llvm-strip处理Mach-O,避免调用有bug的GNU strip,执行更新:

rustup update stable

3. 升级系统到Ventura 13.1及以上

Apple在后续Ventura更新中修复了GNU strip的Mach-O处理bug,升级后默认strip工具就能正常处理64位ARM64二进制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:46:10