我使用自制软件(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 但问题仍然存在
/usr/local/opt/icu4c
不存在,并且 brew reinstall icu4c
给了我一堆 icu4c 目录的“权限被拒绝”问题。所以我sudo rm -rf /usr/local/Cellar/icu4c
和brew reinstall icu4c
,一切正常。
更新 - 正如一些评论中所述,运行 brew cleanup 可能会修复此错误,如果仅此一项不能修复它,您可以尝试升级单个包或所有 brew 包。
我刚遇到同样的问题。升级 Homebrew 然后清理对我有用。由于包版本不匹配,这个错误可能出现在我身上。上述解决方案都没有解决我的错误,但运行以下自制命令可以解决。
注意 - 这将升级所有 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>
其中 version
是 info
返回的已安装版本。
brew list icu4c
显示了来自 /usr/local/Cellar/icu4c/63.1
的文件。 brew switch icu4c 63.1
为我修好了。
brew switch icu4c 63.1
但在日志中仍然出现相同的错误,即使在重新启动 postgres 之后也是如此。不知道下一步该怎么做...
brew reinstall postgres
,这似乎解决了我的问题
brew switch
命令是 brew link
实际上我很惊讶这个解决方案还没有被提出,我觉得它是最简单的解决方案。
转到 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
以安装最新版本的 icu4c 4)将保存的目录复制到 /usr/local/Cellar/icu4c/ 5 )现在您可以在版本之间切换:brew switch icu4c 64.2
brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/22fb699a417093cd1440857134c530f1e3794f7d/Formula/icu4c.rb
brew extract
brew reinstall icu4c.rb
事实证明,我和@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 历史记录。
icu4c
。更新、升级 brew 以及重新安装、重新链接、从源代码构建 php 都不起作用。
git checkout bc0c97952453ff6afc146aa3a706e9902aba4300 -- Formula/icu4c.rb
然后是 brew switch 63.1
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.rb
和 brew link Icu4c@64
。我现在退休到我的archlinux盒子的简单性:)
运行 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
将 macOS
升级到版本 10.13.6
后,我遇到了同样的问题。我无法运行 composer
和 php
命令。在研究了一段时间并尝试了网上发布的各种解决方案后,使用 homebrew
重新安装 php 有效。
brew reinstall php@7.1
根据 Ryan 的评论于 3 月 14 日添加
通过运行 php -v
获取您当前使用的版本,并获取正确的公式(您可以在此处找到:https://formulae.brew.sh/formula/php)以替换上述命令中的 @7.1
。
10.14.2
后,我在运行 node
时遇到了同样的错误,brew reinstall node
也是我的票
brew upgrade
为我解决了这个问题。
brew reinstall php
最终可能会安装与当前版本不同的版本。您可能必须使用 php@7.1
指定版本
php -v
获得当前版本:p
echo $PATH
(如果您有 php
,您应该会看到类似这样的内容:/usr/local/opt/php@7.2/bin
)这是找出哪些版本的一种方法目前正在使用。
这为我修复了它:
brew upgrade node
/icu4c/lib/libicui18n.66.dylib
错误是在我运行 rspec 时突然发生的。我隐藏了一些代码更改,但仍然出现错误。升级节点解决了问题!谢谢!
对我来说,解决方案是:
brew reinstall icu4c
然后
gem uninstall charlock_holmes
gem install charlock_holmes
在最新的 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 -v
或 composer
时仍然遇到相同的错误。节点版本很好,npm 也没有安装正确版本的问题,它们都在运行。运行 reinstall php@7.1
只是抛出了一个错误。最后我不得不跑:
brew reinstall icu4c
这基本上是可行的,我必须手动安装 php 依赖项,例如 imagick.so
、imap.so
因为这些库是为我不再维护的项目安装的,所以我可以不用它们。但是,如果您确实依赖它们,请记住,之后会有更多工作要做。
npm install
在我的工作 macbook force 上周更新到 Catalina 后无法正常工作。最初在这里找到:gist.github.com/berkedel/d1fc6d13651c16002f64653096d1fded
只有 brew remove php
和 brew 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
brew reinstall npm
命令解决了我的问题
实际上,我直接在自制页面上找到了解决方案: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
就我而言,问题与升级操作系统无关,但解决方案运行良好。
2021-02 简单的解决方案
经过多年处理这个问题后,以下非常简单的解决方案对我有用:
在您需要的版本的网络浏览器中打开原始文件:
最新版本:https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/icu4c.rb
将内容复制粘贴到名为:icu4c.rb 的新文件中 在新创建的文件上运行以下命令:brew reinstall icu4c.rb
来源:https://gist.github.com/hgrimelid/703691ab48c4a4d0537cfe835b4d55a6
对我来说,brew reinstall nodejs
解决了这个问题 - 我的问题是运行 Elixir/Phoenix,所以不是 PHP 特定的,我认为这是由 brew install postgres
引起的,但重新安装并没有帮助。我是从 npm
命令中得到它的。
为了降级,我不得不从源代码重新编译(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 update && brew upgrade
为我工作
这最终对我有用。
brew reinstall postgres
运行上述命令后,您可能需要运行
brew postgresql-upgrade-database
访问您以前的数据。
我关注了这篇文章here,这对我来说似乎是缺失的一块:
brew uninstall node@8
brew remove node && brew install node
与其安装旧的(预编译的)php 可以链接到的旧版本的 icu4c
,不如重新编译旧的 php 以链接到更新的库。
brew uninstall php@7.2
brew install --build-from-source php@7.2
这将构建 php 并将其链接到较新的库。我发现 reinstall
不太好用;当目标文件夹已经存在时,新安装会阻塞。
我还为我的环境做了brew link --force php@7.2
。
brew switch icu4c 62.1
命令对我有用。
我遇到了问题,因为我的 PHP (7.3) 版本需要 icu4c 63,而 brew 只能安装 64。
https://stackoverflow.com/a/55828190/2000947 帮我安装了 63。
在 MacOS Mojave 上,我可以修复它的唯一方法是使用 brew upgrade
在 OSX 10.15.4 上运行 xcode-select --install
为我解决了这个问题。
Leland 的回答对我有用,但我不得不将第 4 步和第 6 步更改为:
4) git checkout -B icu4c-62.1 575eb4b
6) brew reinstall Formula/icu4c.rb
在我的情况下,brew update icu4c 到版本 67.1 所以我的 php7.1 不起作用。只需重新安装icu4c,就可以了。
安装 php 7.3 后也出现此错误。我解决了只升级我的旧 php 版本(5.6 和 7.0,而不是来自官方存储库)的问题。
维护人员针对当前的 icu4c 编译了新的 php 版本。
就我而言,PHP 7 从 0.31 到 0.33,问题就解决了。
就我而言,我不得不在两个版本的 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
【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
我只是想详细总结一下目前如何解决这个问题(这对我有用):
先去本地安装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
不定期副业成功案例分享
brew upgrade
将升级 所有 您的 brew 过时软件包,相反,可能只升级brew upgrade npm
或特定软件包,而不是全部。