ChatGPT解决这个技术问题 Extra ChatGPT

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

我使用自制软件(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?
对于后代:卸载/重新安装纱线/节点似乎可以解决问题。
根据我的理解,当您的版本依赖项不匹配时会发生这种情况。就我而言,“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 就不可靠了。

J
Jon Winstanley

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

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

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

brew upgrade icu4c

brew upgrade // or upgrade all packages

最后

brew cleanup

我认为对于像我这样拥有两个 PHP 版本的环境的人来说,这不是一个好主意。此外, brew upgrade 将升级您的 PHP 版本,如果您的目标不是升级 PHP 而是解决库错误,这不是必需的。
我不会这样做,因为 brew upgrade 将升级 所有 您的 brew 过时软件包,相反,可能只升级 brew upgrade npm 或特定软件包,而不是全部。
@xgMz 你是对的。对我来说,我不在乎是否要更新所有的包,但对于不想更新的人来说,那可能不是很好。我在我的解决方案中添加了一条注释。谢谢!
@Leland 下面的答案是我需要的,即使在 brew cleanup 和 brew upgrade 特定包之后也是如此。手动切换包。
这在我运行 brew cleanup 之前就已经奏效了。在我的情况下,直到我尝试通过 crontab 运行 n98 命令(magento cli)才发生错误。这有帮助。
S
Simone

就我而言,这是因为 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 开关不再可用。
新的 brew switch 命令是 brew link
K
Kevin

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

转到 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

更新:

更高版本的 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
不幸的是 brew upgrade 删除了旧的链接版本,对于仍然想使用新版本并保持 brew 最新的人:1)使用提到的命令安装旧版本 2)从 /usr 复制 64.2 目录/local/Cellar/icu4c/ 本地某处 3)运行 brew upgrade 以安装最新版本的 icu4c 4)将保存的目录复制到 /usr/local/Cellar/icu4c/ 5 )现在您可以在版本之间切换:brew switch icu4c 64.2
对于 icu4c 66brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/22fb699a417093cd1440857134c530f1e3794f7d/Formula/icu4c.rb
这不再起作用了。它要求您brew extract
@brunouno 您需要下载 .rb 文件并执行以下操作:brew reinstall icu4c.rb
L
Leland

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

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

我是这样做的:

我们首先需要一个 Homebrew repo 的深度克隆。这可能需要一段时间: 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
好的,brew 继续前进。命令结构发生了变化,“公式”的格式也发生了变化。我通过编辑红宝石以适应新格式来超越格式。尽管正如@bluepanda 所说,这对我没有帮助,但 https://ghcr.io/v2/homebrew/core/icu4c/manifests/64.2 已经消失了。不过,我确实找到了一个替代公式,它确实对我有用:gist.github.com/bbatsche/c1c747bb9297661772ae7e106c556c3f。我使用 wget 提取文件,然后使用 brew reinstall Icu4c@64.rbbrew link Icu4c@64。我现在退休到我的archlinux盒子的简单性:)
L
Lucas Bustamante

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


A
Arun Karnati

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


在将 macOS 升级到 10.14.2 后,我在运行 node 时遇到了同样的错误,brew reinstall node 也是我的票
使用 brew 安装新软件包后,我开始收到此错误。做 brew upgrade 为我解决了这个问题。
brew reinstall php 最终可能会安装与当前版本不同的版本。您可能必须使用 php@7.1 指定版本
如果您的 php 已损坏,您将无法通过运行 php -v 获得当前版本:p
@gingerCodeNinja 是的,也许这可能会有所帮助:对于 Mac OS,转到终端并运行 echo $PATH(如果您有 php,您应该会看到类似这样的内容:/usr/local/opt/php@7.2/bin)这是找出哪些版本的一种方法目前正在使用。
s
sed

这为我修复了它:

brew upgrade node

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

对我来说,解决方案是:

brew reinstall icu4c

然后

gem uninstall charlock_holmes
gem install charlock_holmes

2022 年 5 月,在 macOS 12.3.1 上使用 Ruby on Rails 应用程序,这对我有用。谢谢多里安。
D
Dharman

在最新的 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/… 下载。谢谢!
G
George Milojevic

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

brew reinstall icu4c

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


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

只有 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 )

c
crifan

我的问题:

# 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 命令解决了我的问题
Y
Ygnaaac

实际上,我直接在自制页面上找到了解决方案: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 后,这对我有用。谢谢!
L
Laurence Cooper

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,这对我有用。
C
Callum M

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


T
Taher

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

S
Simson

brew update && brew upgrade 为我工作


欢迎来到 SO!欢迎您的合作。在这种情况下,还有 15 个问题,因此最好展示您的优点。
M
Muzammil Baloch

这最终对我有用。

brew reinstall postgres

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

brew postgresql-upgrade-database

访问您以前的数据。


这对我有用。 macOS 蒙特里,PostgreSQL 14.3
N
Nhan

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

brew uninstall node@8

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

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

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

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

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


试过这个但没有改善;但是 Gray Black 的 brew switch icu4c 62.1 命令对我有用。
M
Matt Rink

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

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


搜索了一段时间后,这对我有帮助。谢谢
L
Léo Maldonado

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


W
Winter Faulk

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


s
sgrwg

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

4) git checkout -B icu4c-62.1 575eb4b

6) brew reinstall Formula/icu4c.rb


m
mokagio

this gist 中的解决方案为我做到了

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

H
Huy Phan

在我的情况下,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,这是损坏的,它也修复了它。不过,本指南为我指明了正确的方向。
D
David Fernández Rafael

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

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

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


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

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

#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

m
mialdi98

【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

[yourUsername]/homebrew-versions/Formula/ 将下载的文件放入“Formula”文件夹 brew tap [yourUsername]/homebrew-versions brew install [yourUsername]/homebrew-versions/icu4c 你明白了!

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

不幸的是,最新的自制软件不再发出警告,现在显示错误:错误:从 GitHub 提交 URL 调用安装 XXX 已禁用!改用“brew extract XXX”来稳定地点击 GitHub。所以现在要走的路是在 github 上创建一个名为 homebrew-versions 的新存储库,以在 Tap 中托管公式然后使用以下命令对其进行初始化: brew tap-new MYORG/homebrew-versions 在 git 克隆自制软件存储库后按照 Shine Hugh 的建议,将原始 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中找到存档链接。从像 stackoverflow.com/a/55024755/3126078 这样的源下载存档并安装
V
Varun Varunesh

我只是想详细总结一下目前如何解决这个问题(这对我有用):

先去本地安装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

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅