brew upgrade 了一大坨的库,把 icu4c 也升级到了最新版本,但是 node 中还依赖的是 69 版本。在执行 node 的时候会提示
dyld: Library not loaded: /opt/homebrew/opt/icu4c/lib/libicui18n.69.dylib
网上有一些解决方案都说是 reinstall icu4c 或者是 node 就可以解决。但是这个方案对我来说是无效的。
反而在 segmentfault.com/a/119000003… 这里的方法解决了问题。实际解决过程中稍微有些输入,这里再记录下。
- 找到 69 版本的 rb 文件
因为 69 版本比较老了,直接 brew search icu4c 是找不到的。
这个时候根据上面链接的说法,可以去 github 中找到老版本的 rb 文件。
但是如果是刚刚出现这个问题,可能老的 rb 文件就在本机上。所以直接根目录搜一把。
在 /usr/local/Cellar/icu4c/69.1/.brew/icu4c.rb 找到了老版本的 rb 文件。
- 替换当前的 rb 文件,并重装
把 Formula 目录下的 icu4c.rb 文件删除,然后拷贝老版本的 rb 文件过去。并执行 brew reinstall icu4b
但是这里出现一些问题,并没有按照预期去安装 69 版本。而是还是下载了 76 版本。怀疑和配置了国内的源有关系。
➜ Formula git:(master) ✗ rm /Users/vissong/Library/Caches/Homebrew/downloads/0c3cd25c1d4a1e15711fdf3bdd123837daa11dbb55dcf6db85abb5100d01b9f6--icu4c@76-76.1_1.arm64_sequoia.bottle.tar.gz
➜ Formula git:(master) ✗ brew reinstall icu4c
==> Fetching icu4c@76
==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/icu4c%4076-76.1_1.arm64_sequoia.bottle.tar.gz
############################################################################################################################################# 100.0%
==> Reinstalling icu4c@76
==> Pouring icu4c@76-76.1_1.arm64_sequoia.bottle.tar.gz
去掉国内的源重新执行,开始从 github 获取 69 版本的源代码并编译了。
==> Fetching icu4c
==> Downloading https://github.com/unicode-org/icu/releases/download/release-69-1/icu4c-69_1-src.tgz
Already downloaded: /Users/vissong/Library/Caches/Homebrew/downloads/f8aef5d65c5f35cdf2ad30ed21e4555659857bcf22052e85d39cab52c6d8ca4d--icu4c-69_1-src.tgz
==> Reinstalling icu4c
Warning: icu4c 76.1_1 is available and more recent than version 69.1.
==> ./configure --disable-samples --disable-tests --enable-static --with-library-bits=64
==> make
==> make install
🍺 /opt/homebrew/Cellar/icu4c/69.1: 260 files, 73.2MB, built in 1 minute 24 seconds
此时执行 node 看一下问题是否解决。奇怪的是 node 又开始报 76 版本找不到了。
于是在 Formula 目录执行 git checkout 恢复被修改的 rb 文件,然后重新安装 icu4c 获得了 76 版本的库。再次执行 node 就正常了。
此时本机有 69 和 76 两个版本的 icu4c 了。