0%

# 聊聊一次 brew update 引发的血案

Posted on 2020-06-13 In Mac , PHP , Homebrew , icu4c Views: Views: Disqus:

熟悉我的人（谁熟悉你啊🙄）知道我以前写过 PHP，虽然现在在工作中没用到了，但是自己的一些小工具还是会用 PHP 来写，但是在 Mac 碰到了一个环境相关的问题，因为我也是个更新狂魔，用了 brew 之后因为 gfw 的原因，如果长时间不更新，有时候要装一个用它装一个软件的话，前置的更新耗时就会让人非常头大，所以我基本会隔天 update 一下，但是这样会带来一个很心烦的问题，就是像这样，因为我是要用一个固定版本的 PHP，如果一直升需要一直配扩展啥的也很麻烦，如果一直升级 PHP 到最新版可能会比较少碰到这个问题

    1
    dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib

这是什么鬼啊，然后我去这个目录下看了下，已经都是libicui18n.67.dylib了，而且它没有把原来的版本保留下来，首先这个是个叫 icu4c是啥玩意，谷歌了一下

> ICU4C是ICU在C/C++平台下的版本, ICU(International Component for Unicode)是基于”IBM公共许可证”的，与开源组织合作研究的, 用于支持软件国际化的开源项目。ICU4C提供了C/C++平台强大的国际化开发能力，软件开发者几乎可以使用ICU4C解决任何国际化的问题，根据各地的风俗和语言习惯，实现对数字、货币、时间、日期、和消息的格式化、解析，对字符串进行大小写转换、整理、搜索和排序等功能，必须一提的是，ICU4C提供了强大的BIDI算法，对阿拉伯语等BIDI语言提供了完善的支持。

然后首先想到的解决方案就是能不能我使用`brew install icu4c@64`来重装下原来的版本，发现不行，并木有，之前的做法就只能是去网上把 64 的下载下来，然后放到这个目录，比较麻烦不智能，虽然没抱着希望在谷歌着，不过这次竟然给我找到了一个我认为非常 nice 的解决方案，因为是在 Stack Overflow 找到的，本着写给像我这样的小小白看的，那就稍微翻译一下
第一步，我们到 brew的目录下

    1
    cd $(brew --prefix)/Homebrew/Library/Taps/homebrew/homebrew-core/Formula

这个可以理解为是 maven 的 pom 文件，不过有很多不同之处，使用ruby 写的，然后一个文件对应一个组件或者软件，那我们看下有个叫icu4c.rb的文件，
第二步看看它的提交历史

    1
    git log --follow icu4c.rb

在 git log 的海洋中寻找，寻找它的(64版本)的身影
第三步注意这三个红框，Stack Overflow 给出来的答案这一步是找到这个 commit id 直接切出一个新分支

    1
    git checkout -b icu4c-63 e7f0f10dc63b1dc1061d475f1a61d01b70ef2cb7

其实注意 commit id 旁边的红框，这个是有tag 的，可以直接

    1
    git checkout icu4c-64

PS: 因为我的问题是出在 64 的问题，Stack Overflow 回答的是 63 的，反正是一样的解决方法
第四部，切回去之后我们就可以用 brew 提供的基于文件的安装命令来重新装上 64 版本

    1
    brew reinstall ./icu4c.rb

然后就是第五步，切换版本

    1
    brew switch icu4c 64.2

最后把分支切回来

    1
    git checkout master

是不是感觉很厉害的解决方法，大佬还提供了一个更牛的，直接写个 zsh 方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # zsh
    function hiicu64() {
      local last_dir=$(pwd)

      cd $(brew --prefix)/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
      git checkout icu4c-4
      brew reinstall ./icu4c.rb
      brew switch icu4c 64.2
      git checkout master

      cd $last_dir
    }

对应自己的版本改改版本号就可以了，非常好用。

请我喝杯咖啡

WeChat Pay

Alipay

- Post author: Nicksxs
- Post link: https://nicksxs.me/2020/06/13/聊聊一次-brew-update-引发的血案/
- Copyright Notice: All articles in this blog are licensed under BY-NC-SA unless stating additionally.