Mac 下安装多个 PHP 版本再运行低版本 PHP 报错:'/usr/local/opt/icu4c/lib/libicuio.72.dylib' (no such file)
因为维护多个新老项目,对于 PHP 多版本有需要。所以按照 Mac 下使用 brew 安装 php7 版本并切换 分别安装了 php71、php80、php81,还有默认的 php(php82)。
最近需要使用到 laravel artisan 指令生成任务类,php71 artisan make:job xxx
,发现 php71 执行报错了,然后试了其他的几个版本,除了最新的 php(php82) 以外,都没有意外的报错了:
> php80 -v
dyld[15905]: Library not loaded: /usr/local/opt/icu4c/lib/libicuio.72.dylib
Referenced from: <00E08E9A-3803-3831-BC94-616E67D40C5F> /usr/local/Cellar/php@8.0/8.0.28/bin/php
Reason: tried: '/usr/local/opt/icu4c/lib/libicuio.72.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/usr/local/opt/icu4c/lib/libicuio.72.dylib' (no such file), '/usr/local/opt/icu4c/lib/libicuio.72.dylib' (no such file), '/usr/local/lib/libicuio.72.dylib' (no such file), '/usr/lib/libicuio.72.dylib' (no such file, not in dyld cache), '/usr/local/Cellar/icu4c/73.2/lib/libicuio.72.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/usr/local/Cellar/icu4c/73.2/lib/libicuio.72.dylib' (no such file), '/usr/local/Cellar/icu4c/73.2/lib/libicuio.72.dylib' (no such file), '/usr/local/lib/libicuio.72.dylib' (no such file), '/usr/lib/libicuio.72.dylib' (no such file, not in dyld cache)
根据描述搜索到一篇问答:dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib error running php after installing node with brew on Mac,情况基本一致。
其中高赞回答的一和二对问题解决都有帮助,回答一里是更新 icu4c 或者更新所有的 brew 包。因为二级评论里提到一般不需要更新所有的 brew 包,就先尝试 回答二里的方法。
回答二:
brew info icu4c
brew switch icu4c <version>
这里执行的时候有问题:Error: Unknown command: switch
。没办法,只好再去尝试回答一。
回答一
注意 - 这会更新所有你安装的 brew 包, 包括但不限于 PHP。 如果你只想更新特定的包,那么就需要指定包名
brew upgrade icu4c
brew upgrade // 或者执行这个更新所有的包
# 最后,执行清理
brew cleanup
一开始想只更新 icu4c
,但收到提示包已安装。这样的话,只能更新所有的包了。执行完后,php 指令返回都正常了。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。