我使用自制(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,但问题仍然存在


当前回答

我已经尝试了这里的许多建议,最后酿造升级php是对我有用的,但似乎这个问题无处不在

其他回答

[2020]版

对我来说,就是用所需的版本安装icu4c。

如果你需要安装旧版本,如版本62,(其他版本相同的步骤),你需要:

用这个版本创建自己的repo(或找别人的repo) Brew tap(每个版本的链接都不同):

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

yourUsername / homebrew-versions /公式/ 将下载的文件放入“公式”文件夹 brew tap [yourUsername]/homebrew-versions brew install [yourUsername]/homebrew-versions/icu4c .使用实例 你说对了!

其中[yourUsername]是您的GitHub帐户或已经拥有所需版本的人的名称。

Unfortunately, latest homebrew gives no longer a warning and now displays the error: Error: Calling Installation of XXX from a GitHub commit URL is disabled! Use 'brew extract XXX' to stable tap on GitHub instead. So the way to go now is to create a new repo on github called homebrew-versions to host the Formula in a Tap Then initialise it with: brew tap-new MYORG/homebrew-versions after git cloning the homebrew repo as suggested by Shine Hugh, copy paste the raw ruby file to your new Formula. Beware the funny naming convention! Example: File name is: gettext@0.20.2.rb Class name is: GettextAT0202 Example: https://github.com/nedap/homebrew-versions source:https://itnext.io/how-to-install-an-older-brew-package-add141e58d32

在我的例子中,发生这种情况是因为icu4c升级到版本63,但我在本地安装的postgres映像仍然引用icu4c 62.1。因此,我不得不改变使用的icu4c版本:

 brew info icu4c
 brew switch icu4c <version>

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

我的问题:

# npm install -g canvas

dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib
  Referenced from: /usr/local/opt/node@8/bin/node
  Reason: image not found

现在20210118,经过多次尝试:

...
brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/icu4c.rb
brew upgrade npm
brew install node
brew uninstall --ignore-dependencies node@8 icu4c
brew install icu4c
...

最终解决方案为:

重新安装NPM

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

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

brew reinstall postgresql@12

我想这也适用于php。

在我的情况下,我不得不在两个版本的icu4c之间切换,因为我仍然维护PHP 5.6项目(使用旧的icu4c 64.2)。由于某些原因,从原始.rb链接进行安装和重新安装总是会替换以前安装的版本。

#fetching 64.2
brew fetch https://raw.githubusercontent.com/Homebrew/homebrew-core/a806a621ed3722fb580a58000fb274a2f2d86a6d/Formula/icu4c.rb 

#fetching stable version
brew fetch https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/icu4c.rb 

cd $(brew --cache)/downloads
tar xvfz e2a83648f37dc5193016ce14fa6faeb97460258b214e805b1d7ce8956e83c1a7--icu4c-64.2.catalina.bottle.tar.gz
tar xvfz e045a709e2e21df31e66144a637f0c77dfc154f60183c89e6b04afa2fbda28ba--icu4c-67.1.catalina.bottle.tar.gz
mv -n icu4c/67.1 $(brew --cellar)/icu4c/
mv -n icu4c/64.2 $(brew --cellar)/icu4c/

然后在版本之间切换

$ brew switch icu4c 64.2
Cleaning /usr/local/Cellar/icu4c/64.2
Cleaning /usr/local/Cellar/icu4c/67.1
Opt link created for /usr/local/Cellar/icu4c/64.2

$ brew switch icu4c 67.1
Cleaning /usr/local/Cellar/icu4c/64.2
Cleaning /usr/local/Cellar/icu4c/67.1
Opt link created for /usr/local/Cellar/icu4c/67.1