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

时间:2018-12-18 08:20:22

标签: php node.js macos homebrew

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

33 个答案:

答案 0 :(得分:141)

在我的情况下,因为icu4c已升级到版本63,但我在本地安装的postgres映像仍引用了icu4c 62.1。因此,我不得不更改所使用的icu4c版本:

 brew switch icu4c 62.1

答案 1 :(得分:128)

  

注意-这将升级您的PHP版本。

我也有同样的问题。升级Homebrew然后进行清理对​​我有用。由于软件包版本不匹配,此错误可能对我显示。上述解决方案均不能解决我的错误。

brew upgrade

然后

brew cleanup

答案 2 :(得分:35)

原来,我像@Grey Black一样,必须实际安装icu4c的v62.1。什么都没用。

但是,brew switch icu4c 62.1仅在过去安装62.1时有效。如果您还没有的话,那么还会涉及更多的立法工作。自制软件会not make it easy to install使用较早版本的公式。

这是我的做法:

  1. 我们首先需要对Homebrew存储库进行深度克隆。这可能需要一段时间: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 .清理修改后的食谱。

感谢@Noah的帮助,添加了一些额外的笔记

答案 3 :(得分:24)

>>> import numpy as np >>> np.array(list(map(np.datetime64,['2017', '2018']))) array(['2017', '2018'], dtype='datetime64[Y]') 升级到版本macOS之后,我遇到了同样的问题。我无法运行10.13.6composer命令。经过一段时间的研究并尝试了在线发布的各种解决方案之后,使用php重新安装php的工作开始了。

homebrew

根据Ryan的评论于3月14日添加

通过运行brew reinstall php@7.1获得当前正在使用的版本,并获取正确的公式(您可以在此处找到https://formulae.brew.sh/formula/php)来替换上述命令中的php -v

答案 4 :(得分:11)

这对我来说是固定的:

brew upgrade node

答案 5 :(得分:4)

运行npm version,看看是否遇到相同的错误。

如果是,请升级您的节点版本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

答案 6 :(得分:3)

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 )

答案 7 :(得分:3)

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

brew reinstall icu4c

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

答案 8 :(得分:3)

这终于对我有用。

brew reinstall postgres

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

brew postgresql-upgrade-database

访问您以前的数据。

答案 9 :(得分:2)

brew update && brew upgrade为我工作

答案 10 :(得分:2)

答案 11 :(得分:2)

我的问题:

# 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

答案 12 :(得分:2)

在MacOS Mojave上,我可以解决的唯一方法是使用brew upgrade

答案 13 :(得分:1)

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

答案 14 :(得分:1)

我紧跟着这篇文章here,对我来说,这似乎是迷失的一部分:

brew uninstall node@8

答案 15 :(得分:1)

在运行xcode-select --install的OSX 10.15.4上,此问题已为我解决。

答案 16 :(得分:1)

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

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

希望它可以节省您几个小时的时间。

答案 17 :(得分:1)

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

答案 18 :(得分:1)

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

答案 19 :(得分:0)

我在这里尝试了很多建议,最后brew upgrade php是我的诀窍,但问题似乎无处不在

答案 20 :(得分:0)

如果您拥有最新的 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 时消失,但这可能是最快的修复方法。

答案 21 :(得分:0)

其实我直接在homebrew页面找到了解决方法: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

就我而言,问题与升级操作系统无关,但解决方案效果很好。

答案 22 :(得分:0)

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

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

这将构建php并将其链接到较新的库。我发现reinstall不太有效;当目标文件夹已经存在时,新安装就停止了。

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

答案 23 :(得分:0)

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

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

答案 24 :(得分:0)

我只想留下当前如何解决此问题的详细摘要(这对我有用):

首先转到本地安装的自制软件

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的旧版本,如果两者都安装,则可以选择使用wich版本。

brew switch icu4c 64.2

答案 25 :(得分:0)

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

4)git checkout -B icu4c-62.1 575eb4b

6)brew重新安装Formula / icu4c.rb

答案 26 :(得分:0)

[ 2020]版

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

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

  1. 使用此版本的文件创建您自己的存储库(或查找某人的存储库) 酿造水龙头(每个版本的链接都不同):

版本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
  1. [您的用户名] / homebrew-versions / Formula /
  2. 将下载的文件放置到“ Formula”文件夹中
  3. brew tap [yourUsername]/homebrew-versions
  4. brew install [yourUsername]/homebrew-versions/icu4c
  5. 你明白了!

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

不幸的是,最新的自制软件不再提供警告,现在 显示错误:错误:从GitHub调用XXX安装 提交网址已禁用!使用'brew extract XXX'稳定在GitHub上的点击 代替。所以现在要走的方法是在github上创建一个名为 homebrew-versions可以在Tap中托管公式,然后对其进行初始化 使用:git克隆后酿造新的MYORG / homebrew-versions 如Shine Hugh所建议的自制回购,请复制粘贴原始红宝石文件 您的新配方。当心有趣的命名约定!示例:文件 名称是:gettext@0.20.2.rb类名称是:GettextAT0202示例: https://github.com/nedap/homebrew-versions

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

答案 27 :(得分:0)

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

#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

答案 28 :(得分:0)

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

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

答案 29 :(得分:0)

在安装php 7.3之后也遇到了此错误。我已解决了仅升级旧php版本(5.6和7.0,不是从官方存储库中升级)的问题。

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

就我而言,PHP 7从0.31升至0.33,问题得以解决。

答案 30 :(得分:0)

我真的很惊讶尚未提出该解决方案,我觉得这是最简单的解决方案。

转到GitHub,找到与所需icu4c版本匹配的brewfile版本,并获取文件的原始版本(按照上面的链接,依次单击View File和{{1 }}。

然后只需从该URL重新安装brew。

例如,版本Raw

62.1

答案 31 :(得分:0)

我遇到了问题,因为我的PHP(7.3)版本期望的是icu4c 63,而brew仅能安装64。

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

答案 32 :(得分:-1)

对于我来说,我会重新安装所有用Homebrew安装的软件包

$ brew list | xargs brew reinstall

然后,我开始安装所需的版本