dyld:库未加载:/usr/local/opt/icu4c/lib/libicui18n.62。在Mac上使用brew安装node后,dylib运行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,但问题仍然存在

306918 次浏览

在我将macOS升级到10.13.6版本后,我也遇到了同样的问题。我不能运行composerphp命令。在研究了一段时间并尝试了网上发布的各种解决方案后,使用homebrew重新安装php成功了。

# EYZ0

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

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

在我的例子中,发生这种情况是因为icu4c升级到版本63,但我在本地安装的postgres映像仍然引用icu4c 62.1。因此,我不得不改变使用的icu4c版本:

 brew info icu4c
brew switch icu4c <version>

其中version是由info返回的已安装版本。

结果我和@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. # EYZ0
  4. # EYZ0
  5. # EYZ0
  6. 你现在应该有了正确的依赖版本!现在…
  7. git reset && git checkout .清理你修改过的食谱。
  8. 固定依赖项,以防止将来意外升级

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

与其安装旧的(预编译的)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 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 )

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

我也有同样的问题。升级Homebrew然后清理对我来说很有效。这个错误可能是由于包版本不匹配造成的。上面的解决方案都不能解决我的错误,但是运行下面的自制程序命令可以。

谨慎 -这将升级你所有的酿造包,包括但不限于PHP。如果你只想升级特定的包,请确保是特定的。

brew upgrade icu4c


brew upgrade // or upgrade all packages

最后

brew cleanup

在最新的OS X更新后,似乎不可能使用brew链接icu4c。这让事情变得更有趣。我找到的唯一解决办法是:

  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. 设置~/.bash_profile中的DYLD_LIBRARY_PATH:
export DYLD_LIBRARY_PATH=/usr/local/include

Leland的答案对我来说很管用,但我不得不把第4步和第6步改为:

4) git checkout -B icu4c-62.1 575eb4b

6) brew重装Formula/icu4c.rb

在安装php 7.3后也得到这个错误。我已经解决了升级旧的php版本(5.6和7.0,不是从官方回购)。

维护者根据当前的icu4c编译了新的php版本。

在我的例子中,PHP 7从0.31升级到0.33,问题得到了解决。

运行npm version,如果你看到同样的错误,升级npm。

# EYZ0。

==> Upgrading 1 outdated package, with result:
npm 8.1.2 -> 10.3.0
==> Upgrading npm
==> Installing dependencies for node: icu4c
==> Installing node dependency: icu4c

credit .

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

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

然后让brew从那个url重新安装。

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

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

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

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

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

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

brew update && brew upgrade对我很有用

我跟随这篇文章在这里,这似乎是我所缺少的一块拼图:

brew uninstall node@8

在OSX 10.15.4运行xcode-select --install为我修复了这个问题。

在我的情况下,我重新安装与Homebrew安装的所有包

$ brew list | xargs brew reinstall

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

这是最后对我有用的方法。

# EYZ0

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

# EYZ0

访问您以前的数据。

这个要点中的解决方案为我解决了这个问题

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/

我尝试了这里的许多建议,最后brew upgrade php对我来说是最有效的,但似乎这个问题无处不在

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

#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

[# EYZ0

对我来说,就是用所需的版本安装icu4c。

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

    用这个版本创建自己的repo(或找别人的repo) 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
  1. yourUsername / homebrew-versions /公式/
  2. 将下载的文件放入“公式”文件夹
  3. # EYZ0
  4. # EYZ0
  5. 你说对了!

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

不幸的是,最新的自制啤酒不再给出警告,现在 错误:error: Calling Installation of XXX from a GitHub 提交URL被禁用!使用'brew extract XXX'稳定点击GitHub 代替。所以现在要做的是在github上创建一个新的repo叫做 home - brew-versions在点击中托管公式,然后初始化它 在git克隆了MYORG/homebrew后,点击-new MYORG/homebrew-versions 自制回购建议由Shine休,复制粘贴原始红宝石文件 你的新配方。小心有趣的命名惯例!例如:文件 名称:gettext@0.20.2.rb类名称:GettextAT0202示例: # EYZ0 < / p >

来源:# EYZ0

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

brew reinstall icu4c
这基本上起作用了,我不得不手动安装php依赖项,如imagick.soimap.so 由于这些库是为一个我不再维护的项目安装的,我可以没有它们。但是如果你确实依赖于他们,请记住之后会有更多的工作要做

我只是想留下一个关于当前如何修复这个问题的详细总结(这对我来说很有效):

首先去本地安装自制软件

cd /usr/local/Homebrew/

家酿的在2.5删除直接从git回购中安装公式的选项,因此我们需要签出一个旧版本

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

我的问题:

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

最终的工作解决方案是:

# EYZ0

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

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

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

升级macOS会导致以下错误:

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

在我的案例中,问题与升级操作系统无关,但解决方案很有效。

如果你有最新的icu4c版本,并且像我一样遭受脆弱软件的折磨,只想要postgres/任何工作:

$ 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时消失,但这可能是最快的修复方法。

对我来说,解决办法是:

brew reinstall icu4c

然后

gem uninstall charlock_holmes
gem install charlock_holmes

[2022 Build It Yourself Edition]

适用于我的Mac OS 11.6.8大苏尔。

$ 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的回答 李# EYZ0 < / >

关于恢复丢失的icu4c版本有很多答案。我对postgresql也有同样的错误,我想这可以在依赖于动态链接该库的各种程序中体现出来。

对我来说,我使用的是postgresql的特定版本,即postgresql@12。我发现最简单的方法就是重新安装

brew reinstall postgresql@12

我想这也适用于php