我使用自制(Mojave)安装节点,之后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,但问题仍然存在


当前回答

2021-02简单解决方案

在处理这个问题多年后,下面的解决方案对我来说非常简单:

在您需要的版本的web浏览器中打开原始文件:

版本62:https://raw.githubusercontent.com/Homebrew/homebrew-core/575eb4bbef683551e19f329f60456b13a558132f/Formula/icu4c.rb

版本64:https://raw.githubusercontent.com/Homebrew/homebrew-core/a806a621ed3722fb580a58000fb274a2f2d86a6d/Formula/icu4c.rb

版本66:https://raw.githubusercontent.com/Homebrew/homebrew-core/22fb699a417093cd1440857134c530f1e3794f7d/Formula/icu4c.rb

版本67:https://raw.githubusercontent.com/Homebrew/homebrew-core/88b9cc789820f2f544d8d4a1053eebb044c2926c/Formula/icu4c.rb

最新版本:https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/icu4c.rb

复制粘贴内容到一个名为: icu4c.rb 在新创建的文件上执行以下命令

来源:https://gist.github.com/hgrimelid/703691ab48c4a4d0537cfe835b4d55a6

其他回答

与其安装旧版本的icu4c,让旧的(预编译的)php可以链接到它,不如重新编译旧的php以链接到最新的库。

brew uninstall php@7.2
brew install --build-from-source php@7.2

这将构建php并将其链接到更新的库。我发现重新安装不太管用;当目标文件夹已经存在时,新的安装阻塞。

我还为我的环境做了brew link -force php@7.2。

我看了这篇文章,这似乎是我所缺少的一块拼图:

brew uninstall node@8

关于恢复icu4c丢失版本有很多答案。我在postgresql中也有同样的错误,我想这可以在依赖于动态链接该库的各种程序中体现出来。

对于我来说,我使用的是特定版本的postgresql,即postgresql@12。我发现最简单的方法就是重新安装

brew reinstall postgresql@12

我想这也适用于php。

在我的情况下,酿造更新icu4c到版本67.1,所以我的php7.1不能工作。 重新安装icu4c就可以了。

参考:https://devhoi.com/threads/error-dyld-library-not-loaded-usr-local-opt-icu4c-lib-libicui18n-64-dylib-with-php7-1.26/

为了降级,我不得不从源代码(MacOS Mojave)重新编译

$ wget https://ssl.icu-project.org/files/icu4c/62.1/icu4c-62_1-src.tgz
$ tar xvfz icu4c-62_1-src.tgz
$ cd icu/sources
$ ./configure
$ make
$ make install