写点什么

解决 dyld: Library not loaded icu4c

发布于: 2021 年 02 月 23 日
解决dyld: Library not loaded icu4c

起因

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

dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.61_1.dylibReferenced from: /usr/local/opt/php7/bin/phpReason: image not foundTrace/BPT trap: 5
复制代码


定位问题

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

  1. 升级php到 7.3,但是这样会导致一堆 php 版本问题;

  2. 或者将icu4c降级到 61_1 版本,但是这 node 就不能用了

  3. 安装两个 icu4c,来回切换

这样看来,方案 3 最靠谱(实际上我被方案 1 坑了一波)~

解决问题

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

找到需要的版本

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

编译安装

mkdir ~/sourcescd ~/sourceswget http://download.icu-project.org/files/icu4c/61.1/icu4c-61_1-src.tgztar xvzf icu4c-61_1-src.tgzcd icu/source/# 建个目录sudo mkdir /usr/local/Cellar/icu4c/61.1# 设定编译至该路径./configure --prefix=/usr/local/Cellar/icu4c/61.1# 编译make# 安装sudo make install
复制代码

版本切换

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

brew info icu4c
复制代码

切换版本

brew switch icu4c 61.1
复制代码


------------------------------- 分割线:20210314--------------------------------

更新了 brew 以后,不能使用 brew switch 了。


Error: Calling `brew switch` is disabled! Use `brew link` @-versioned formulae instead.
复制代码


解决办法是:

  1. 新建一个文件,命名为brew-switch

  2. 添加内容

#! /usr/bin/env bash
set -euo pipefail
pkg=$1
version=$2
brew unlink "$pkg"
(
pushd "$(brew --prefix)/opt"
rm -f "$pkg"
ln -s "../Cellar/$pkg/$version" "$pkg"
)
brew link "$pkg"
复制代码
  1. 保存后 chmod +x brew-switch 增加执行权限。

  2. 将文件放到/usr/local/bin内。


然后使用brew-switch 切换版本就可以了。

发布于: 2021 年 02 月 23 日阅读数: 36
用户头像

多读书多看报,少吃零食多睡觉 2018.08.07 加入

还未添加个人简介

评论

发布
暂无评论
解决dyld: Library not loaded icu4c