Mac Monterey运行rake命令报lib.dylib找不到、GEOS库加载失败
问题环境
- 操作系统:Mac Monterey 12.2.1(Apple Silicon 架构)
- 触发场景:执行
bundle install完成所有依赖安装无报错,运行bundle exec rake db:test:refresh命令时抛出LoadError异常 - 错误特征:提示无法加载GEOS CAPI库,系统无法打开
lib.dylib;遍历默认搜索路径/usr/lib、/usr/local/lib、项目目录均未找到对应文件
根因分析
- 查看
ffi-geos.rb源码内的search_paths搜索路径配置,发现默认配置未覆盖Apple Silicon架构下Homebrew的默认库存放路径/opt/homebrew/lib - 进入
/opt/homebrew/lib路径核查,目录下仅存在libgeos.3.10.2.dylib、libgeos.dylib、libgeos_c系列动态库,不存在报错提及的lib.dylib文件 - 本质问题:ffi-geos的默认路径匹配逻辑在M系列芯片Mac的Homebrew环境下失效,无法定位到其依赖的GEOS C接口动态库
libgeos_c.dylib,路径缺失导致文件名匹配异常抛出找不到lib.dylib的错误,并非真的缺失名为lib.dylib的文件
修复方案
二选一即可,优先选择环境变量方案,无侵入性:
- 方案1:环境变量指定库路径(推荐)
在当前shell配置文件(zsh对应~/.zshrc,bash对应~/.bash_profile)或者项目的环境变量配置文件中添加如下配置:
执行export GEOS_LIBRARY_PATH=/opt/homebrew/lib/libgeos_c.dylibsource命令加载配置(以zsh为例:source ~/.zshrc),回到项目目录重新执行之前的rake命令即可正常运行。 - 方案2:修改gem搜索路径配置
找到本地gem存储路径下的ffi-geos.rb文件,在其search_paths数组中追加Homebrew的Apple Silicon库路径:
保存文件后重新执行命令即可。search_paths = [ # 保留原有所有默认路径配置 '/opt/homebrew/lib' # 新增该行 ]
验证
重新执行bundle exec rake db:test:refresh,无LoadError抛出即为修复完成。
内容的提问来源于stack exchange,提问作者shimanovAV
相关产品推荐
相关产品推荐

