起因

brew 安装 npm,安装完成后发现php用不了了,报错信息如下

1
2
3
4
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.61_1.dylib
Referenced from: /usr/local/opt/php7/bin/php
Reason: image not found
Trace/BPT trap: 5

定位问题

PHP7依赖61_1版本的icu4c,使用brew info icu4c 提示当前版本为63。那么解决办法就来了

  1. 升级php7.3,但是这样会导致一堆php版本问题;
  2. 或者将icu4c降级到61_1版本,但是这node就不能用了
  3. 安装两个icu4c,来回切换

这样看来,方案3最靠谱~

解决问题

没有找到brew直接安装多版本的icu4c的方案,所以直接编译到brew的目录,然后用brew进行管理版本,本地的环境为mac ios 10.15

找到需要的版本

官网地址,按需自取,例如我需要的是61_1,对应的地址是http://download.icu-project.org/files/icu4c/61.1/icu4c-61_1-src.tgz

编译安装

1
2
3
4
5
6
7
8
9
10
11
12
13
mkdir ~/sources
cd ~/sources
wget http://download.icu-project.org/files/icu4c/61.1/icu4c-61_1-src.tgz
tar xvzf icu4c-61_1-src.tgz
cd icu/source/
# 建个目录
sudo mkdir /usr/local/Cellar/icu4c/61.1
# 设定编译至该路径
./configure --prefix=/usr/local/Cellar/icu4c/61.1
# 编译
make
# 安装
sudo make install

版本切换

查看本机中已安装的icu4c版本

1
brew info icu4c

切换版本

1
brew switch icu4c 61.1

后记

其实被方案1给坑了,刚开始没在意,发生问题就直接搜索,想要直接站在巨人的肩膀上,结果需要执行brew upgrade php 然后就有各种php版本的问题。。下篇说说phpbrew管理多版本php