dyld: 库未加载:/usr/local/opt/icu4c/lib/libicui18n.62.dylib 在 Mac 上使用 brew 安装 node 后运行 php 出错

654

我使用Homebrew (Mojave)安装了Node.js后,PHP停止工作,并且如果我尝试运行php -v ,我会收到以下错误信息:

php -v
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib
  Referenced from: /usr/local/bin/php
  Reason: image not found

我尝试卸载node和icu4c,但问题仍然存在。


6
为了后人纪念:卸载/重新安装Yarn/Node似乎是解决问题的方法。 - Nathaniel Ford
41
根据我的理解,这种情况发生在您的版本依赖出现不匹配的情况下。在我的情况下,“brew upgrade”命令解决了我的问题。如有任何错误,请指出。 - sh6210
13
我获得这个过程中遇到的问题是 /usr/local/opt/icu4c 目录不存在,并且 brew reinstall icu4c 命令在 icu4c 目录上出现了很多 "permission denied" 错误。所以我使用了 sudo rm -rf /usr/local/Cellar/icu4c 命令删除了目录,然后再次执行 brew reinstall icu4c 命令,一切都正常了。 - Seth Johnson
我遇到了一个奇怪的情况(在一台过时的机器上使用High Sierra),但这是在我更新PHP到7.2之后发生的(或者尝试更新)。我的解决方案是从下载重新安装node。一旦你超出了苹果支持的MacOS范围,Homebrew就不可靠了,我发现。 - David Rhoden
1
只运行 brew upgrade 就帮助了我。 - Maxim Yefremov
显示剩余6条评论
42个回答

985
更新 - 如一些评论中所述,运行brew cleanup可能会修复此错误,如果仅此无法解决问题,则可以尝试升级单个软件包或所有brew软件包。
我遇到了同样的问题。升级Homebrew然后清理工作对我有用。这个错误可能是由于软件包版本不匹配而出现的。以上解决方案都未能解决我的错误,但运行以下homebrew命令确实解决了问题。
注意 - 这将升级您所有的brew软件包,包括但不限于PHP。如果您只想升级特定的软件包,请确保具体指明。
brew upgrade icu4c

brew upgrade // or upgrade all packages

最后

brew cleanup

21
我认为对于那些像我一样有两个 PHP 版本环境的人来说,这不是一个好主意。另外,使用 "brew upgrade" 命令将升级您的 PHP 版本,如果您的目标不是升级 PHP 而是解决库错误,则这并不是一个好选择。 - Having a life on a beach
61
我不会执行 brew upgrade 这个命令,因为它会升级 所有 过期的 homebrew 软件包,相反,最好只运行 brew upgrade npm 或者是指定某个软件包进行升级,而不是全部升级。 - xgMz
2
@xgMz 你说得对。对我来说,我并不在意是否更新所有的软件包,但对于那些不想要的人来说,这可能不是很好。我已经在我的解决方案中添加了一条注释。谢谢! - Full Stack Alien
1
@mpoletto 不用担心!我会在答案中提供适当的警告,以便任何考虑该解决方案的人都能理解其影响。 - Full Stack Alien
1
@VimDiesel 我没有解决方案。这就是为什么我在这里寻找一个的原因。下面Grey Black的那个有效。 - J.Ko
显示剩余26条评论

332

这在我的情况下发生,是因为icu4c被升级到了版本63,但我本地安装的postgres镜像仍然引用了icu4c 62.1。因此,我不得不更改使用的icu4c版本:

 brew info icu4c
 brew switch icu4c <version>

其中version是由info返回的已安装版本。


22
我没有安装62.1版本。brew list icu4c显示的是从/usr/local/Cellar/icu4c/63.1路径下的文件。通过运行brew switch icu4c 63.1命令,问题得到了解决。 - Steven Ensslen
4
在我的Postgres日志中发现了这个错误后,我找到了这个页面。我还尝试过brew switch icu4c 63.1,但是在重新启动Postgres后仍然在日志中看到相同的错误。不确定接下来该怎么办... - Andrew
37
我最终运行了brew reinstall postgres,这似乎解决了我的问题。 - Andrew
28
很遗憾,brew switch已不再可用。 - zenon
26
新的brew switch命令是brew link - Simone
显示剩余9条评论

145

实际上,我很惊讶这个解决方案还没有被提出,而且我觉得这是最简单的解决方案。

去GitHub,找到与所需的icu4c版本相匹配的brewfile版本,并获取文件的原始版本(按照上面的链接,点击“查看文件”,然后点击“原始”)。

然后只需使用brew从该URL重新安装即可。

例如,版本62.1

brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/575eb4bbef683551e19f329f60456b13a558132f/Formula/icu4c.rb
例如,版本64.2
brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/a806a621ed3722fb580a58000fb274a2f2d86a6d/Formula/icu4c.rb

更新:

较新的Homebrew版本可能需要您先下载该文件。如果是这种情况:

wget https://raw.githubusercontent.com/Homebrew/homebrew-core/a806a621ed3722fb580a58000fb274a2f2d86a6d/Formula/icu4c.rb
brew reinstall icu4c.rb

30
运作良好!为了解决错误 dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib,使用以下命令可以修复它:brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/a806a621ed3722fb580a58000fb274a2f2d86a6d/Formula/icu4c.rb - John Kary
3
对于 icu4c 66 版本,执行以下命令进行重新安装:brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/22fb699a417093cd1440857134c530f1e3794f7d/Formula/icu4c.rb - Magnus
10
这不再起作用了。它要求您执行“brew extract”。 - brunouno
5
您需要下载.rb文件并执行以下操作:brew reinstall icu4c.rb - Patrick Fabrizius
4
对我来说,运行 brew reinstall icu4c 就可以了。感谢你指导我朝着正确的方向前进! - Joel Mellon
显示剩余10条评论

101

运行npm version,如果您看到相同的错误,请升级npm。

brew upgrade npm

==> Upgrading 1 outdated package, with result:
npm 8.1.2 -> 10.3.0
==> Upgrading npm
==> Installing dependencies for node: icu4c
==> Installing node dependency: icu4c

致谢


它适用于我的情况,因为我昨天升级了PHP到v8.2,但是失败了一半,然而在那之前icu4c已经升级到了v.72(通过brew upgrade),而当前的npm版本仅支持71。因此,将npm升级到最新版本以匹配新升级的icu4c版本解决了我的问题。 - free2idol1

84
原来我和@Grey Black一样,必须安装v62.1的icu4c版本,其他版本都不行。但是,如果你以前没有安装过62.1版本,则brew switch icu4c 62.1无效。这需要更多的工作。Homebrew不方便安装先前版本的公式。
以下是我的解决方法:
  1. 首先需要深度克隆Homebrew存储库。这可能需要一段时间:git -C $(brew --repo homebrew/core) fetch --unshallow
  2. brew log icu4c查找引用了62.1的提交;575eb4b就可以了。
  3. cd $(brew --repo homebrew/core)
  4. git checkout 575eb4b -- Formula/icu4c.rb
  5. brew uninstall --ignore-dependencies icu4c
  6. brew install icu4c 现在您应该拥有正确的依赖项版本!现在只需要...
  7. git reset && git checkout .清理已修改的配方。
  8. brew pin icu4c 将依赖项固定,以防止将来意外升级

如果您决定在某个时候升级它,请确保运行brew unpin icu4c


2
你应该首先执行 git -C (brew --repo homebrew/core) fetch --unshallow 来确保你拥有完整的 brew git 历史记录。 - Noah
4
这是我找到的唯一解决方案,对我很有用,谢谢!在我的情况下,问题出在ffmpeg包上,我想它安装了更新版本的icu4c。无论是更新、升级brew,还是重新安装、重链、从源代码构建php,都没有生效。 - gedijedi
5
在我的情况下,我需要 icu4c v63 版本,因此相关的提交检出是 bc0c97952453ff6afc146aa3a706e9902aba4300。git 命令是 git checkout bc0c97952453ff6afc146aa3a706e9902aba4300 -- Formula/icu4c.rb 然后执行 brew switch 63.1 - nahuelhds
2
当我尝试通过 https://github.com/Homebrew/homebrew-core/commit/88b9cc789820f2f544d8d4a1053eebb044c2926c 获取版本67.1时,会产生以下结果:==> 正在下载 https://ghcr.io/v2/homebrew/core/icu4c/manifests/67.1 #=#=-# # curl: (22) 所请求的 URL 返回错误: 404 Error: 未能下载资源“icu4c_bottle_manifest” 下载失败: https://ghcr.io/v2/homebrew/core/icu4c/manifests/67.1 - bluepanda
1
好的,所以brew已经更新了。命令结构已经改变,"formula"的格式也发生了变化。我通过编辑ruby来适应新的格式来解决了格式问题。但是这并没有帮助我,因为正如@bluepanda所说,https://ghcr.io/v2/homebrew/core/icu4c/manifests/64.2已经不存在了。不过我找到了一种替代的公式,并且它对我起作用:https://gist.github.com/bbatsche/c1c747bb9297661772ae7e106c556c3f。我使用`wget`拉取文件,然后使用`brew reinstall Icu4c@64.rb,接着使用brew link Icu4c@64`。现在我将退回到我的archlinux盒子的简单性中 :) - starfry
显示剩余10条评论

71

对我来说解决方法是:

brew reinstall icu4c

那么

gem uninstall charlock_holmes
gem install charlock_holmes

只需要运行 brew reinstall icu4c 命令就解决了我的问题。谢谢。 - Chau Pham
对我来说解决方案是 brew reinstall icu4c - Theodory
1
对我而言,只有重新安装charlock_holmes才能解决问题。 - Yuri Sidorov
1
这对我来说解决了vips的错误。 - Gabriel

62
我在将我的macOS升级到版本10.13.6后遇到了相同的问题。我无法运行composerphp命令。经过一段时间的研究并尝试网上发布的各种解决方案后,使用homebrew重新安装php成功了。 brew reinstall php@7.1 根据Ryan的评论于3月14日添加 通过运行php -v获取您当前使用的版本,并获取正确的公式(您可以在此处找到:https://formulae.brew.sh/formula/php),以替换上述命令中的@7.1

17
在将 macOS 升级到 10.14.2 后,我运行 node 时遇到了相同的错误,brew reinstall node 对我也很有帮助。 - gnmerritt
我在使用brew安装新软件包后开始遇到这个错误。运行brew upgrade命令解决了我的问题。 - samurai jack
2
brew reinstall php may end up installing a different version to the current one. You may have to specify the version using php@7.1 - Ryan
8
如果你的 PHP 出了问题,就算运行 php -v 命令也无法获取当前版本号。 :p - gingerCodeNinja
1
@gingerCodeNinja,没错,也许这个方法可以帮到你:对于Mac OS,打开终端并运行 echo $PATH (如果你有 php,你应该会看到类似这样的东西:/usr/local/opt/php@7.2/bin),这是一种查找当前正在使用的版本的方法。 - Arun Karnati

44

以下方法解决了我的问题:

brew upgrade node

1
这对我也起作用了。我从未完全调查过,但我相信brew在升级node时也修复了依赖关系。与brew upgrade相比,这感觉更加容易控制。 - hendrikbeck
2
似乎是类似的情况,“brew reinstall node”在我切换到Catalina后帮了我。 - greencrest
1
有趣的是,当我运行rspec时,突然出现了/icu4c/lib/libicui18n.66.dylib错误。我隐藏了我的一些代码更改,但错误仍然出现。升级node解决了问题!谢谢! - Jon Kern
1
谢谢 :) 我本来要尝试其他方法,但这个立刻解决了我的问题。 - Nick Taras

17

我实际上尝试了所有在此帖子中有意义的解决方案,但当运行 php -vcomposer 时,仍然会出现相同的错误。 Node 版本正常,npm 也是如此,安装的版本无误,且它们都在运行。 运行 reinstall php@7.1 只会抛出一个错误。 最终我不得不运行:

brew reinstall icu4c

这基本上是可行的,但我需要手动安装PHP依赖项,例如imagick.soimap.so等库。由于这些库是为我不再维护的项目安装的,因此我可以不使用它们。但如果您确实有依赖它们的需求,请记住之后还需要更多的工作。


这对我很有用!上周我的工作MacBook强制更新到Catalina后,npm install无法正常工作。原始来源在此处找到:https://gist.github.com/berkedel/d1fc6d13651c16002f64653096d1fded - Kingsley

15

最近的OS X更新后,似乎不可能使用brew链接icu4c。这使事情更有趣。我找到的唯一解决方案是:

  1. 下载并编译icu4c 62.1到/usr/local/icu4c/62.1
mkdir ~/sources
cd ~/sources
wget http://download.icu-project.org/files/icu4c/62.1/icu4c-62_1-src.tgz
tar xvzf icu4c-62_1-src.tgz
cd icu/source/

sudo mkdir /usr/local/icu4c/62.1
./configure --prefix=/usr/local/icu4c/62.1
make
sudo make install
  1. 连接库:
ln -s /usr/local/icu4c/62.1/lib/*.dylib /usr/local/include/
  1. ~/.bash_profile中设置DYLD_LIBRARY_PATH
export DYLD_LIBRARY_PATH=/usr/local/include

3
我正在使用PHP 7.1,这是唯一适用于我的解决方法。 - WebTigers
在我的情况下,我需要64.2版本,所以我从https://github.com/unicode-org/icu/releases/download/release-64-2/icu4c-64_2-src.tgz下载了它。 - RafaelQm
2
更新到Big Sur操作系统后,icu4c 67不见了,尝试了各种解决方案,但这是唯一有效的方法。从https://github.com/unicode-org/icu/releases/download/release-67-1/icu4c-67_1-src.tgz下载了它。谢谢! - Sabine
1
这个已经被移动到这里:https://github.com/unicode-org/icu/releases/download/release-62-2/icu4c-62_2-src.tgz - Maros
对于 node@12icu4c@71.1 的安装,可以通过以下命令实现:$ ln -sf /usr/local/Cellar/icu4c@71.1/71.1/lib/*.dylib /usr/local/lib/ - Marslo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接