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

Posted

技术标签:

【中文标题】dyld:库未加载:/usr/local/opt/icu4c/lib/libicui18n.62.dylib 在 Mac 上使用 brew 安装节点后运行 php 错误【英文标题】:dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib error running php after installing node with brew on Mac 【发布时间】:2019-05-18 15:02:32 【问题描述】:

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

【问题讨论】:

您是否也从 Homebrew 安装了 php?您是否尝试重新安装 php? 对于后代:卸载/重新安装 yarn/node 似乎可以解决问题。 据我了解,当您的版本依赖项不匹配时会发生这种情况。就我而言,“brew upgrade”命令解决了我的问题。请纠正我,如果我有任何错误。 当我得到这个时,问题是/usr/local/opt/icu4c 不存在,brew reinstall icu4c 给了我一堆 icu4c 目录的“权限被拒绝”问题。所以我sudo rm -rf /usr/local/Cellar/icu4cbrew reinstall icu4c,一切正常。 我遇到了一个奇怪的情况(在过时的机器上使用 High Sierra),但这发生在我将 PHP 更新到 7.2(或尝试更新)之后。我的解决方案是从下载中重新安装节点。我发现,一旦你超出了 Apple 支持的 MacOS 范围,Homebrew 就不可靠了。 【参考方案1】:

对我来说,解决方案是:

brew reinstall icu4c

然后

gem uninstall charlock_holmes
gem install charlock_holmes

【讨论】:

在这里工作得很好。【参考方案2】:

如果你有最新的icu4c 版本并且像我一样遭受脆弱软件的困扰,只想让postgres/whatever 工作:

$ brew upgrade icu4c                                                                                                                           
Warning: icu4c 69.1 already installed

然后你就可以创建符号链接了:

> dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicuuc.68.dylib

cd /usr/local/opt/icu4c/lib
ln -s libicuuc.69.1.dylib libicuuc.68.dylib
ln -s libicuio.69.1.dylib libicui18n.68.dylib

这些符号链接将在您第一次更新 icu4c 时消失,但这可能是最快的修复方法。

【讨论】:

【参考方案3】:

2021-02轻松解决

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

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

版本 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 在新创建的文件上运行以下命令:brew reinstall icu4c.rb

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

【讨论】:

我找到了一组类似的指令,但它需要编译源代码:programmersought.com/article/34721476513,这对我有用。【参考方案4】:

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

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

然后只需从该 url 重新安装 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

更新:

更高版本的 Homebrew 可能需要您先下载文件。如果是这样的话:

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

【讨论】:

你是救生员! 效果很好!要修复错误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 对于 icu4c 66brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/22fb699a417093cd1440857134c530f1e3794f7d/Formula/icu4c.rb 这不再起作用了。它要求您brew extract @brunouno 您需要下载 .rb 文件并执行:brew reinstall icu4c.rb【参考方案5】:

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

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

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

在我的情况下,问题与升级操作系统无关,但解决方案运行良好。

【讨论】:

升级到 mac OS 11.6 Big Sur 后,这对我有用。谢谢!【参考方案6】:

我通过更新所有 R 包解决了 int:

update.packages(checkBuilt = TRUE, ask = FALSE)

【讨论】:

【参考方案7】:

我的问题:

# 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

【讨论】:

brew reinstall npm 命令解决了我的问题【参考方案8】:

我只是想详细说明当前如何解决此问题(这对我有用):

先去本地安装homebrew

cd /usr/local/Homebrew/

Homebrew > 2.5 删除了直接从 git repos 安装公式的选项,因此我们需要检查旧版本

git checkout 2.3.0

安装 icu4c 版本(在我的情况下 64.2 与 php@7.1 兼容)

HOMEBREW_NO_AUTO_UPDATE=1 brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/a806a621ed3722fb580a58000fb274a2f2d86a6d/Formula/icu4c.rb

回到当前版本的自制软件

git checkout -

这样告诉 brew 使用旧版本的 icu4c,如果你都安装了,你可以选择使用哪个版本

brew switch icu4c 64.2

【讨论】:

【参考方案9】:

更新 - 如某些 cmets 所述,运行 brew cleanup 可能会修复此错误,如果仅此一项无法修复,您可以尝试升级单个包或所有 brew 包。

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

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

brew upgrade // for upgrading all packages -- this is the command I used

brew upgrade package // for upgrading a specific package

最后

brew cleanup

【讨论】:

那是......简单 我认为这对于像我这样拥有两个 PHP 版本的环境的人来说不是一个好主意。此外, brew upgrade 将升级您的 PHP 版本,如果您的目标不是升级您的 PHP 而是解决库错误,这并不是必需的。 这是迄今为止我尝试过的最佳解决方案,所选答案无效 我不会这样做,因为brew upgrade 将升级所有您的 brew 过时软件包,相反,可能只升级 brew upgrade npm 或特定软件包,而不是全部。 @xgMz 你说得对。对我来说,我不在乎我是否更新了所有的包,但对于不想更新的人来说,那可能不是很好。我在我的解决方案中添加了一条注释。谢谢!【参考方案10】:

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

brew reinstall icu4c

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

【讨论】:

这对我有用! npm install 在上周我的工作 macbook force 更新到 Catalina 后无法正常工作。最初在这里找到:gist.github.com/berkedel/d1fc6d13651c16002f64653096d1fded【参考方案11】:

我关注了这篇文章here,这对我来说似乎是缺失的一块:

brew uninstall node@8

【讨论】:

在尝试了不同形式的每个建议后,我的错误在使用后停止了,但现在我们在重新安装节点后遇到了关于 npm 的问题 接受的答案对我不起作用。对我有用的是这个答案的变体:brew remove node && brew install node【参考方案12】:

[2020] 版

对我来说,它是安装具有所需版本的 icu4c。

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

    使用此版本的 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
    [您的用户名]/homebrew-versions/Formula/ 将下载的文件放到“公式”文件夹中 brew tap [yourUsername]/homebrew-versions brew install [yourUsername]/homebrew-versions/icu4c 你明白了!

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

不幸的是,最新的自制程序不再发出警告,现在 显示错误:错误:从 GitHub 调用安装 XXX 提交 URL 已禁用!使用 'brew extract XXX' 在 GitHub 上稳定点击 反而。所以现在要走的路是在github上创建一个新的repo,叫做 homebrew-versions 在水龙头中托管公式然后初始化它 与: git 克隆后 brew tap-new MYORG/homebrew-versions 按照 Shine Hugh 的建议,自制 repo,复制粘贴原始 ruby​​ 文件 到你的新公式。当心有趣的命名约定!示例:文件 名称为:gettext@0.20.2.rb 类名称为:GettextAT0202 示例: https://github.com/nedap/homebrew-versions

来源:https://itnext.io/how-to-install-an-older-brew-package-add141e58d32

【讨论】:

如果遇到错误,请尝试从源安装://1.下载文件(例如 67) wget raw.githubusercontent.com/Homebrew/homebrew-core/… //2.在文件'cat icu4c.rb'//3中找到存档链接。从***.com/a/55024755/3126078等源下载存档并安装【参考方案13】:

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

Credits

【讨论】:

完全按照你说的那样工作。 npm version 引发了同样的错误,升级 npm 修复了它。谢谢!【参考方案14】:

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

#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

【讨论】:

【参考方案15】:

事实证明,我和@Grey Black 一样,必须实际安装 v62.1 的 icu4c。没有其他工作。

但是,brew switch icu4c 62.1 仅在您过去安装了 62.1 时才有效。如果您还没有,则涉及更多的跑腿工作。 Homebrew 执行 not make it easy to install 以前版本的公式。

我是这样做的:

    我们首先需要对 Homebrew 存储库进行深度克隆。这可能需要一段时间:git -C $(brew --repo homebrew/core) fetch --unshallow brew log icu4c 追踪引用 62.1 的提交; 575eb4b 可以解决问题。 cd $(brew --repo homebrew/core) git checkout 575eb4b -- Formula/icu4c.rb brew uninstall --ignore-dependencies icu4c brew install icu4c 您现在应该拥有正确版本的依赖项!现在只是... git reset && git checkout . 清理您修改后的配方。 brew pin icu4c 固定依赖,防止以后意外升级

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

【讨论】:

您应该首先使用git -C (brew --repo homebrew/core) fetch --unshallow 以确保您拥有完整的 brew git 历史记录。 纱线升级有这么多戏剧性。 这是唯一对我有用的解决方案,谢谢!就我而言,问题是 ffmpeg 包,我假设它安装了较新版本的icu4c。更新、升级 brew 以及重新安装、重新链接、从源代码构建 php 都不起作用。 在我的情况下,我需要 icu4c v63,因此结帐的相关提交是 bc0c97952453ff6afc146aa3a706e9902aba4300。 git 命令是git checkout bc0c97952453ff6afc146aa3a706e9902aba4300 -- Formula/icu4c.rb,然后是brew switch 63.1 当我尝试使用github.com/Homebrew/homebrew-core/commit/… 获取版本67.1 时,这导致==> Downloading https://ghcr.io/v2/homebrew/core/icu4c/manifests/67.1 #=#=-# # curl: (22) The requested URL returned error: 404 Error: Failed to download resource "icu4c_bottle_manifest" Download failed: https://ghcr.io/v2/homebrew/core/icu4c/manifests/67.1【参考方案16】:

我在这里尝试了很多建议,最后brew upgrade php 对我有用,但似乎问题无处不在

【讨论】:

【参考方案17】:

在我的情况下,brew update 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/

【讨论】:

我只是重新安装了 php 7.3,这是坏掉的,它也修复了它。不过,本指南为我指明了正确的方向。【参考方案18】:

this gist 中的解决方案帮我解决了

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

【讨论】:

【参考方案19】:

这最终对我有用。

brew reinstall postgres

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

brew postgresql-upgrade-database

访问您以前的数据。

【讨论】:

【参考方案20】:

就我而言,我重新安装了使用 Homebrew 安装的所有软件包

$ brew list | xargs brew reinstall

之后,我开始安装我需要的版本

【讨论】:

【参考方案21】:

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

【讨论】:

【参考方案22】:

brew update && brew upgrade 为我工作

【讨论】:

欢迎来到 SO!欢迎您的合作。在这种情况下,还有 15 个问题,因此最好展示一下您的优点。【参考方案23】:

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

【讨论】:

【参考方案24】:

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

    下载并编译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
    链接库:
ln -s /usr/local/icu4c/62.1/lib/*.dylib /usr/local/include/
    ~/.bash_profile中设置DYLD_LIBRARY_PATH
export DYLD_LIBRARY_PATH=/usr/local/include

【讨论】:

我正在运行 PHP 7.1,这是唯一对我有用的东西。 就我而言,我需要 64.2 版本,所以我从 github.com/unicode-org/icu/releases/download/release-64-2/… 下载了它 更新到 OS Big Sur 后,icu4c 67 不见了,尝试了各种解决方案,但这是唯一有效的解决方案。从github.com/unicode-org/icu/releases/download/release-67-1/… 下载。谢谢! 此内容已移至此处:github.com/unicode-org/icu/releases/download/release-62-2/…【参考方案25】:

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

【讨论】:

【参考方案26】:

这为我解决了问题:

brew upgrade node

【讨论】:

这对我也有用。我从未完全调查过它,但我相信 brew 在升级节点时也修复了依赖项。与 brew upgrade 相比,这感觉要包含更多内容。 似乎类似的情况,> 'brew reinstall node' 在切换到 Catalina 后确实帮助了我 奇怪的是,这个/icu4c/lib/libicui18n.66.dylib错误是在我运行rspec的时候突然出现的。我隐藏了一些代码更改,但仍然出现错误。升级节点解决了问题!谢谢! 谢谢 :) 我正要尝试其他解决方案 - 但这立即解决了我的问题。【参考方案27】:

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

【讨论】:

【参考方案28】:

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

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

【讨论】:

搜索了一段时间后,这对我有帮助。谢谢【参考方案29】:

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

 brew info icu4c
 brew switch icu4c <version>

其中versioninfo返回的安装版本

【讨论】:

这正是发生在我身上的事情,你让我走上了正轨。这种方法的主要警告是您必须以前安装过这个版本。我在回答中解决了这个问题 我没有安装 62.1。 brew list icu4c 显示了来自 /usr/local/Cellar/icu4c/63.1 的文件。 brew switch icu4c 63.1 为我修好了。 在我的 Postgres 日志中发现此错误后,我找到了此页面。我也尝试了brew switch icu4c 63.1,但在日志中仍然出现同样的错误,即使在重新启动 postgres 之后也是如此。不知道下一步该做什么...... 我最终运行了brew reinstall postgres,这似乎解决了我的问题 不幸的是 brew 开关不再可用。【参考方案30】:

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

维护人员已经针对当前的 icu4c 编译了新的 php 版本。

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

【讨论】:

其他答案没有涵盖吗? 国际海事组织,没有。一个答案是关于重新编译,而我要做的是“更新”。 我从非官方仓库升级后也遇到了这个错误,但是 brew upgrade node 修复了它。

以上是关于dyld:库未加载:/usr/local/opt/icu4c/lib/libicui18n.62.dylib 在 Mac 上使用 brew 安装节点后运行 php 错误的主要内容,如果未能解决你的问题,请参考以下文章

php -v 返回 dyld:库未加载:/usr/local/opt/readline/lib/libreadline.7.dylib

dyld:库未加载:/usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib、php-fpm、php5.6

dyld:库未加载:VSCode终端中的/usr/local/opt/icu4c/lib/libicui18n.63.dylib

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

如何解决库未加载的错误?

Homebrew 不会运行 wget 命令(库未加载)