Homebrew升级后libgit2版本不兼容致exa报错的解决办法
问题场景
在macOS 13.2的zsh环境中执行exa命令时,触发以下动态库加载错误:
dyld[15164]: Library not loaded: /usr/local/opt/libgit2/lib/libgit2.1.6.dylib
Referenced from: <14346135-E664-31AF-A80B-05A5335ED5D7> /usr/local/Cellar/exa/0.10.1_1/bin/exa
Reason: tried: '/usr/local/opt/libgit2/lib/libgit2.1.6.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/usr/local/opt/libgit2/lib/libgit2.1.6.dylib' (no such file), '/usr/local/opt/libgit2/lib/libgit2.1.6.dylib' (no such file), '/usr/local/lib/libgit2.1.6.dylib' (no such file), '/usr/lib/libgit2.1.6.dylib' (no such file, not in dyld cache), '/usr/local/Cellar/libgit2/1.7.2/lib/libgit2.1.6.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/usr/local/Cellar/libgit2/1.7.2/lib/libgit2.1.6.dylib' (no such file), '/usr/local/Cellar/libgit2/1.7.2/lib/libgit2.1.6.dylib' (no such file), '/usr/local/lib/libgit2.1.6.dylib' (no such file), '/usr/lib/libgit2.1.6.dylib' (no such file, not in dyld cache)
zsh: abort exa -1 --classify --group-directories-first
问题源于Homebrew升级后,libgit2被更新至1.7.2版本(对应库文件libgit2.1.7.2.dylib),但当前安装的exa 0.10.1_1依赖旧版libgit2.1.6.dylib,导致动态库查找失败。用户已尝试brew unlink/link libgit2、卸载重装libgit2、安装最新命令行工具、重启电脑等操作,问题未解决。
修复方法
方法一:重装exa(推荐)
重装exa会让Homebrew重新适配当前系统的依赖库版本,彻底解决版本不匹配问题:
- 卸载现有exa:
brew uninstall exa - 清理Homebrew缓存(可选,确保拉取最新安装包):
brew cleanup exa - 重新安装exa:
brew install exa
方法二:创建符号链接临时兼容(备选)
如果暂时不想重装exa,可通过符号链接让系统“误以为”旧版库存在,但存在兼容性风险——新版libgit2可能有API变更,可能导致exa出现未知bug或崩溃:
- 进入libgit2的库目录:
cd /usr/local/opt/libgit2/lib/ - 创建旧版文件名指向新版库的符号链接:
ln -s libgit2.1.7.2.dylib libgit2.1.6.dylib - 确保主库链接指向最新版本:
ln -sf libgit2.1.7.2.dylib libgit2.dylib
若后续exa出现异常,直接删除符号链接即可:
rm /usr/local/opt/libgit2/lib/libgit2.1.6.dylib
方法三:安装指定版本libgit2(不推荐)
安装旧版libgit2可能解决依赖问题,但会影响其他依赖libgit2的工具,导致连锁问题:
- 查找libgit2的历史版本:
brew search libgit2 --versions - 安装找到的1.6.x版本(替换
1.6.0为实际版本号):brew install libgit2@1.6.0 - 强制链接该版本到系统:
brew link libgit2@1.6.0 --force
内容的提问来源于stack exchange,提问作者Alex Roberts

