dyld:库未加载:/usr/local/opt/icu4c/lib/libicui18n.62.dylib 在 Mac



我使用自制软件(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

我尝试卸载节点和icu4c,但问题仍然存在

更新 - 如某些评论中所述,运行brew cleanup可能会修复此错误,如果仅靠它不能解决它,您可以尝试升级单个包或所有 brew 包。

我只是遇到了同样的问题。升级自制软件,然后清理对我有用。由于软件包版本不匹配,此错误可能出现在我身上。上述解决方案都没有解决我的错误,但运行以下自制命令可以解决。

注意- 这将升级您的所有brew软件包,包括但不限于PHP。如果您只想升级特定软件包,请确保是特定的。

brew upgrade icu4c
brew upgrade // or upgrade all packages

最后

brew cleanup

就我而言,发生这种情况是因为 icu4c 已升级到版本 63,但我本地安装的 postgres 映像仍引用 icu4c 62.1。因此,我不得不更改使用的 icu4c 版本:

brew info icu4c
brew switch icu4c <version>

其中versioninfo返回的已安装版本。

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

转到 GitHub,找到与所需icu4c版本匹配的 brewfile 版本,并获取文件的原始版本(点击上面的链接并单击View File然后单击Raw)。

然后只需从该网址重新安装brew即可。

例如,版本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

更新:

更高版本的自制软件可能需要您先下载文件。如果是这种情况:

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

运行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

学分

事实证明,我和@Grey Black一样,不得不实际安装icu4c的v62.1。其他方法都不起作用。

但是,brew switch icu4c 62.1仅在您过去安装了 62.1 时才有效。如果你没有,就会有更多的跑腿工作。自制软件使安装以前版本的公式变得不容易。

这是我是如何做到的:

  1. 我们首先需要自制存储库的深度克隆。这可能需要一段时间: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

对我来说,解决方案是:

brew reinstall icu4c

然后

gem uninstall charlock_holmes
gem install charlock_holmes

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

这为我修复了它:

brew upgrade node

我实际上尝试了这篇文章中提到的所有有意义的解决方案,但在运行php -vcomposer时仍然遇到相同的错误。 节点版本很好,npm 也没有安装正确版本的问题,它们都在运行。 运行reinstall php@7.1只是抛出了一个错误。 最后我不得不跑:

brew reinstall icu4c

这基本上有效,我必须手动安装 php 依赖项,例如imagick.soimap.so由于这些库是为我不再维护的项目安装的,因此我可以没有它们。但是,如果您确实依赖它们,请记住,之后会有更多的工作要做。

似乎在最新的OS X更新后无法使用brew链接icu4c。这让事情变得更加有趣。我发现对我有用的唯一解决方案:

  1. 下载并编译icu4c62.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

只是brew remove phpbrew install php不起作用,brew reinstall php也没有。 我的解决方案是:

brew remove php
cd /usr/local/Cellar
rm -rf php/
brew install php
brew doctor
brew cleanup

现在php -v给了我:

PHP 7.3.2 (cli) (built: Feb 14 2019 10:08:45) ( NTS )

我的问题:

# 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
...

最终工作的解决方案是:

brew reinstall npm

对我来说,它出现了node@12 以下步骤对我有用——

brew uninstall --ignore-dependencies icu4c
brew install node

它自动安装了ICU4C并修复了整个事情。

对我来说brew reinstall nodejs解决了这个问题 - 我的问题是运行 Elixir/Phoenix,所以不是 PHP 特定的,我认为这是由brew install postgres引起的,但重新安装它没有帮助。我是从npm命令中得到的。

实际上,我直接在自制页面上找到了解决方案:https://docs.brew.sh/Common-Issues

升级 macOS 可能会导致如下错误:

dyld:
  • 库未加载:/usr/local/opt/icu4c/lib/libicui18n.54.dylib 配置: 错误: 找不到 libz
  • 在macOS升级后,可能需要重新安装Xcode命令行工具并升级所有已安装的公式:
xcode-select --install
brew upgrade

就我而言,问题与升级操作系统无关,但解决方案运行良好。

2021-02简单的解决方案

经过多年的处理这个问题,以下非常简单的解决方案对我有用:

  1. 在 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

  1. 复制粘贴内容到名为: ICU4C.rb
  2. 在新创建的文件上运行以下命令:brew reinstall icu4c.rb

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

>brew update && brew upgrade为我工作

为了降级,我不得不从源代码(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

这就是最终对我有用的。

brew reinstall postgres

运行上述命令后,您可能需要运行

brew postgresql-upgrade-database

以访问您之前的数据。

我在这里关注了这篇文章,这似乎是我缺少的一块拼图:

brew uninstall node@8

在MacOS Mojave上,我唯一可以修复它的方法是使用brew upgrade

关于恢复丢失的icu4c版本的很多答案。我在postgresql上遇到了同样的错误,我想这可以表现为依赖于动态链接该库的各种程序。

对我来说,我正在使用特定版本的postgresql,即postgresql@12.我发现最简单的解决方法是重新安装它

brew reinstall postgresql@12

我想这对php也有效。

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

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

这将构建 php 并将其链接到较新的库。我发现reinstall不太管用;当目标文件夹已存在时,新安装窒息。

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

我遇到了问题,因为我的PHP(7.3)版本期待icu4c 63,而brew只会安装64。

https://stackoverflow.com/a/55828190/2000947 帮助我安装了 63。

在运行xcode-select --install的OSX 10.15.4上为我解决了这个问题。

Leland 的回答对我有用,但我不得不将步骤 4 和 6 更改为:

4) git 结帐 -B ICU4C-62.1 575EB4B

6) 冲泡重新安装公式/icu4c.rb

这个要点中的解决方案为我做到了

brew uninstall --ignore-dependencies node icu4c
brew install node

就我而言,将 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/

[2022 年自己构建版]

在Mac OS 11.6.8 Big Sur上为我工作。

$ wget https://github.com/unicode-org/icu/releases/download/release-69-1/icu4c-69_1-src.tgz
$ # In Finder, copy from Downloads/ to your home directory
$ tar xzvf icu4c-69_1-src.tgz
$ cd icu/source
$ ./configure
$ make
$ make install

在那之后,nodenpm再次工作。

引用

  • @Taher的回答 https://stackoverflow.com/a/63045892/16681513

安装 php 7.3 后也出现此错误。我解决了只升级旧 php 版本(5.6 和 7.0,而不是来自官方存储库)的问题。

维护者针对当前的icu4c编译了新的php版本。

就我而言,PHP 7 从 0.31 变为 0.33,问题解决了。

相关内容

最新更新