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

Mac M1环境下无法安装snappy_ext gem的问题求助

解决Mac M1上snappy_ext gem安装失败的问题

问题背景

  • 环境:Mac M1 (arm64),重装Ruby和Homebrew后无法安装snappy_ext
  • 尝试过的方案:多个Ruby版本(3.2.2、2.7.6、3.0.6)、多种版本管理工具(rvm、rbenv、chruby、frum、asdf)、链接不同openssl版本,均无效
  • 核心报错:安装时链接阶段出现ld: 45 duplicate symbols,该gem源码多年未更新

解决思路

1. 利用系统/Homebrew预安装的snappy库,跳过gem内部编译

这个方案避免gem重复编译snappy导致符号冲突:

  • 先通过Homebrew安装snappy:
    brew install snappy
    
  • 安装gem时指定系统snappy库路径:
    gem install snappy_ext -- --with-snappy-dir=$(brew --prefix snappy)
    
  • 如果用Bundler,先配置构建参数再安装:
    bundle config build.snappy_ext --with-snappy-dir=$(brew --prefix snappy)
    bundle install
    

2. 修复gem源码的符号重复问题

由于snappy_ext自带的snappy库和Ruby扩展部分重复编译了相同符号,可修改源码构建配置:

  • 克隆该gem的源码仓库,进入仓库目录
  • 进入ext/snappy目录,修改configure脚本或Makefile.in,移除对snappy核心代码的编译步骤,改为链接外部snappy库
  • 本地构建并安装gem:
    gem build snappy_ext.gemspec
    gem install snappy_ext-0.1.2.gem
    

3. 用Rosetta 2切换到x86环境安装

通过模拟x86架构绕过arm64下的编译兼容问题:

  • 右键终端图标,选择「使用Rosetta打开」
  • 安装x86版本的Homebrew(默认会安装到/usr/local)
  • 安装x86版本的Ruby(以asdf为例):
    asdf install ruby 3.0.6 --configure-opts="--with-arch=x86_64"
    
  • 在这个终端环境下执行gem install snappy_ext或bundle install

4. 替换为维护活跃的替代gem

snappy_ext多年未更新,可改用以下兼容M1的替代方案:

  • snappy:纯Ruby绑定,支持arm64
  • ffi-snappy:基于FFI的绑定,无需编译原生扩展

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:22:33