Mac Sonoma(M3 Max)下Rails项目bundle install时sqlite3编译报错
解决sqlite3 1.4.2在M3 Max Sonoma上的编译错误
问题场景
在搭载M3 Max芯片的macOS 14 Sonoma设备上,使用Ruby 2.7.8 + Rails 5.2执行bundle install时,sqlite3 1.4.2版本出现原生扩展编译错误,报错涉及-Wno-error=incompatible-function-pointer-types和-Wno-error=int-conversion类型不兼容问题,此前在macOS 11 Big Sur上可正常完成安装。已尝试修改.bundle/config添加编译参数、单独安装sqlite3和nio4r gem,但问题仍未解决。
当前环境配置:
- Ruby版本:ruby 2.7.8p225 (2023-03-30 revision 1f4d455848) [arm64-darwin23]
- Rails版本:~>5.2
- 设备:MacBook M3 Max,macOS Sonoma 14.4
解决方案
方案1:通过环境变量传递编译参数
直接在执行命令前设置环境变量,确保编译参数正确传递给sqlite3 gem的编译过程:
- 先单独安装指定版本的sqlite3:
ARCHFLAGS="-arch arm64" gem install sqlite3 -v 1.4.2 -- --with-cflags="-Wno-error=incompatible-function-pointer-types -Wno-error=int-conversion"
- 再执行bundle install:
bundle install
如果单独安装后bundle仍报错,可直接在bundle命令前附加环境变量:
ARCHFLAGS="-arch arm64" CFLAGS="-Wno-error=incompatible-function-pointer-types -Wno-error=int-conversion" bundle install
方案2:升级sqlite3 gem版本
sqlite3 1.4.2版本对arm64架构的新编译器兼容性不足,升级到修复过相关问题的版本(如1.4.4及以上):
- 修改Gemfile中的sqlite3版本声明:
gem 'sqlite3', '~> 1.4.4'
- 执行更新命令:
bundle update sqlite3
方案3:指定brew安装的sqlite3路径(若已通过brew安装)
如果使用Homebrew安装了sqlite3,可指定其路径让gem编译时调用:
gem install sqlite3 -v 1.4.2 -- --with-sqlite3-dir=$(brew --prefix sqlite3) --with-cflags="-Wno-error=incompatible-function-pointer-types -Wno-error=int-conversion"
完成后再执行bundle install
内容的提问来源于stack exchange,提问作者Victor Cordeiro Costa
相关产品推荐
相关产品推荐

