Mac M1 Air运行gem报Bad CPU type in executable错误如何解决
报错根本原因
该报错是M系列(arm64架构)Mac上典型的二进制架构不匹配问题:
- 报错信息
arch: posix_spawnp: gem: Bad CPU type in executable的直接触发逻辑是:当前执行的gem可执行文件的编译架构,和你指定/当前终端运行的CPU架构不匹配,系统无法加载运行。 - 之前执行
sudo arch -x86_64 gem install ffi无效的原因:M1芯片上默认通过Homebrew安装的Ruby是arm64原生编译版本,对应的gem二进制也是arm64架构,强行指定用x86_64模式运行arm64架构的二进制,必然触发CPU类型不匹配错误。 - 执行
brew uninstall --ignore-dependencies ruby后问题解决的逻辑:卸载Homebrew安装的独立Ruby后,系统会优先调用MacOS自带的/usr/bin/gem,这个官方自带的二进制是通用胖二进制,同时兼容arm64和x86_64架构,不存在架构匹配问题,所以操作恢复正常。
标准修复方案
根据自身使用场景选对应方案即可:
- 无特殊Ruby版本需求,优先使用系统自带Ruby
- 先执行
which gem确认当前gem来源,如果输出路径为/opt/homebrew/opt/ruby/bin/gem这类Homebrew安装路径,直接执行brew uninstall --ignore-dependencies ruby移除Homebrew版Ruby即可 - 重启终端后再次执行
which gem,确认输出为/usr/bin/gem即修复完成 - 后续安装gem包时建议追加
--user-install参数,将包装到当前用户目录避免权限问题,不要随意用sudo调用系统gem。
- 先执行
- 需要保留Homebrew安装的Ruby版本
- 取消终端的Rosetta转译设置:访达中找到终端应用,右键选「显示简介」,取消勾选「使用Rosetta打开」
- 重启终端后执行
hash -r清除shell缓存,直接正常调用gem命令即可,不要额外加arch -x86_64前缀。
- 明确需要使用x86_64架构Ruby的场景
- 右键终端勾选「使用Rosetta打开」,重启终端后安装x86架构版本的Homebrew
- 通过x86版Homebrew执行
brew install ruby,安装完成后这版Ruby对应的gem就是x86_64架构,此时再用arch -x86_64前缀调用才会正常,不要和arm64版Homebrew安装的Ruby混用。
内容的提问来源于stack exchange,提问作者muhyidin
相关产品推荐
相关产品推荐

