dyld:Library未加载:/usr/local/opt/icu4c/lib/libicui18n.62.dylib在Mac上安装brew节点后运行php时出错
我使用自制软件(Mojave)安装了node,之后php停止工作,如果我尝试运行dyld:Library未加载:/usr/local/opt/icu4c/lib/libicui18n.62.dylib在Mac上安装brew节点后运行php时出错,php,node.js,macos,homebrew,Php,Node.js,Macos,Homebrew,我使用自制软件(Mojave)安装了node,之后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,但问题仍然存在我在将我的macOS升级到版本10.13.6后遇到了相同的
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,但问题仍然存在我在将我的
macOS
升级到版本10.13.6
后遇到了相同的问题。我无法运行composer
和php
命令。在研究了一段时间并尝试了在线发布的各种解决方案后,使用homebrew
重新安装php成功了
brew重新安装php@7.1
根据Ryan的评论于3月14日添加
通过运行
php-v
获取当前使用的版本,并获取正确的公式(您可以在此处找到:)以替换上述命令中的@7.1
在我的例子中,发生这种情况是因为icu4c升级到63版,但我本地安装的postgres映像仍然引用icu4c 62.1。因此,我必须更改使用的icu4c版本:
brew info icu4c
brew switch icu4c <version>
brew信息icu4c
brew交换机icu4c
其中,
version
是由info
返回的已安装版本,结果是我像@Grey Black一样,不得不实际安装icu4c的v62.1。没有别的办法
但是,brew switch icu4c 62.1
仅在您以前安装过62.1时才起作用。如果你还没有,还有更多的腿部工作要做。Homebrew不提供以前版本的公式
我是这样做的:
git-C$(brew--repo自制/core)fetch--unslow
brew日志icu4c
以跟踪引用62.1的提交;这就是诀窍cd$(brew——回购自制/核心版)
git checkout 575eb4b--Formula/icu4c.rb
brew卸载--忽略依赖项icu4c
brew安装icu4c
您现在应该拥有正确版本的依赖项!现在只想git重置和&git签出。
清理修改后的配方brew pin icu4c
锁定依赖项以防止将来意外升级如果您决定在某个时候升级它,请确保运行
brew unpin icu4c
而不是安装旧版本的icu4c
,旧版本(预编译)php可以链接到该版本,最好重新编译旧的php以链接到较新的库
brew uninstall php@7.2
brew install --build-from-source php@7.2
这将构建php并将其链接到较新的库。我发现重新安装
不太管用;当目标文件夹已存在时,新安装被阻塞
我还做了
brew链接--forcephp@7.2
适用于我的环境。只是brew删除php
和brew安装php
不起作用,也没有brew重新安装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软件包
我也有同样的问题。升级自制然后清理对我来说很有效。这个错误可能出现在我身上,因为包版本不匹配。上述解决方案都没有解决我的错误,但运行以下自制命令就解决了
注意-这将升级所有brew软件包,包括但不限于PHP。如果您只想升级特定的软件包,请确保是特定的
最后
brew cleanup
最新OS X更新后,似乎无法使用
brew
链接icu4c
。这让事情变得更有趣。我发现唯一适合我的解决方案是:
icu4c
62.1至/usr/local/icu4c/62.1
~/.bash\u配置文件中设置DYLD\u库路径
:
Leland的回答对我很有用,但我不得不将第4步和第6步改为: 4) git签出-B icu4c-62.1 575eb4b
6) brew重新安装公式/icu4c.rb在安装PHP7.3后也出现此错误。我决定只升级我的旧php版本(5.6和7.0,而不是从官方回购协议) 维护人员根据当前的icu4c编译了新的php版本
在我的例子中,PHP7从0.31变为0.33,问题就解决了。运行
npm版本
,如果您看到相同的错误,请升级npm
brew升级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
事实上,我很惊讶这个解决方案还没有出现,我觉得这是最简单的解决方案 转到GitHub,找到与所需的
icu4c
版本匹配的brewfile版本,并获取文件的原始版本(按照上面的链接,单击查看文件
,然后单击原始
)
然后让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
更新:
更高版本的自制软件可能要求您先下载该文件。如果是这种情况:
wget https://raw.githubusercontent.com/Homebrew/homebrew-core/a806a621ed3722fb580a58000fb274a2f2d86a6d/Formula/icu4c.rb
brew reinstall icu4c.rb
我遇到了一些问题,因为我的PHP(7.3)版本期望icu4c 63,而brew只安装64
帮助我安装63。为了降级,我必须从源代码重新编译(MacOS Mojave) 这为我解决了这个问题:
brew upgrade node
在MacOS Mojave上,我唯一能修复它的方法是使用
brew升级对我来说brew重新安装nodejs
修复了这个问题-我的问题是运行Elixir/Phoenix,所以不是特定于PHP的,我认为这是由brew安装postgres
引起的,但重新安装没有帮助。我是通过npm
命令获得它的。brew更新和brew升级
brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/575eb4bbef683551e19f329f60456b13a558132f/Formula/icu4c.rb
brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/a806a621ed3722fb580a58000fb274a2f2d86a6d/Formula/icu4c.rb
wget https://raw.githubusercontent.com/Homebrew/homebrew-core/a806a621ed3722fb580a58000fb274a2f2d86a6d/Formula/icu4c.rb
brew reinstall icu4c.rb
$ 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
brew uninstall node@8
brew uninstall --ignore-dependencies node icu4c
brew install node
#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
https://raw.githubusercontent.com/Homebrew/homebrew-core/575eb4bbef683551e19f329f60456b13a558132f/Formula/icu4c.rb
https://raw.githubusercontent.com/Homebrew/homebrew-core/a806a621ed3722fb580a58000fb274a2f2d86a6d/Formula/icu4c.rb
https://raw.githubusercontent.com/Homebrew/homebrew-core/22fb699a417093cd1440857134c530f1e3794f7d/Formula/icu4c.rb
https://raw.githubusercontent.com/Homebrew/homebrew-core/88b9cc789820f2f544d8d4a1053eebb044c2926c/Formula/icu4c.rb
brew reinstall icu4c
cd /usr/local/Homebrew/
git checkout 2.3.0
HOMEBREW_NO_AUTO_UPDATE=1 brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/a806a621ed3722fb580a58000fb274a2f2d86a6d/Formula/icu4c.rb
git checkout -
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
...
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
...
update.packages(checkBuilt = TRUE, ask = FALSE)