簡體   English   中英

dyld:庫未加載:/usr/local/opt/icu4c/lib/libicui18n.62.dylib 在 Mac 上使用 brew 安裝節點后運行 php 時出錯

[英]dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib error running php after installing node with brew on Mac

我使用自制軟件(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 但問題仍然存在

更新 - 正如一些評論中所述,運行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>

其中versioninfo返回的已安裝版本。

實際上我很驚訝這個解決方案還沒有被提出,我覺得它是最簡單的解決方案。

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

事實證明,我和@Grey Black 一樣,必須實際安裝 v62.1 的 icu4c。 沒有其他工作。

但是, brew switch icu4c 62.1僅在您過去安裝了 62.1 時才有效。 如果您還沒有,則涉及更多的跑腿工作。 Homebrew無法輕松安裝以前版本的公式。

我是這樣做的:

  1. 我們首先需要一個 Homebrew repo 的深度克隆。 這可能需要一段時間: 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 . 清理你修改過的食譜。
  8. brew pin icu4c固定依賴,防止以后意外升級

如果您決定在某個時候確實要升級它,請確保運行brew unpin icu4c

運行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后,我遇到了同樣的問題。 我無法運行composerphp命令。 在研究了一段時間並嘗試了在線發布的各種解決方案后,使用homebrew重新安裝 php 有效。

brew reinstall php@7.1

根據 Ryan 的評論於 3 月 14 日添加

通過運行php -v獲取您當前使用的版本並獲取正確的公式(您可以在此處找到: https://formulae.brew.sh/formula/php )以替換上述命令中的@7.1

這為我修復了它:

brew upgrade node

對我來說,解決方案是:

brew reinstall icu4c

然后

gem uninstall charlock_holmes
gem install charlock_holmes

似乎在最新的 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

實際上,我嘗試了本文中提到的所有有意義的解決方案,但是在運行php -vcomposer時我仍然遇到相同的錯誤。 節點版本很好,npm 也沒有安裝正確版本的問題,它們都在運行。 運行reinstall php@7.1只是拋出了一個錯誤。 最后我不得不跑:

brew reinstall icu4c

這基本上奏效了,我必須手動安裝 php 依賴項,例如imagick.soimap.so因為這些庫是為我不再維護的項目安裝的,所以我可以不用它們。 但是,如果您確實依賴它們,請記住,之后會有更多工作要做。

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

我的問題:

# 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

2021-02簡單的解決方案

經過多年處理這個問題后,以下非常簡單的解決方案對我有用:

  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

最新版本: https ://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/icu4c.rb

  1. 將內容復制粘貼到一個名為:icu4c.rb 的新文件中
  2. 在新創建的文件上運行以下命令: brew reinstall icu4c.rb

來源: https ://gist.github.com/hgrimelid/703691ab48c4a4d0537cfe835b4d55a6

實際上,我直接在自制頁面上找到了解決方案: 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

就我而言,問題與升級操作系統無關,但解決方案運行良好。

對我來說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

訪問您以前的數據。

在這里關注了這篇文章,這對我來說似乎是缺失的一塊拼圖:

brew uninstall node@8

與其安裝舊的(預編譯的)php 可以鏈接到的舊版本的icu4c ,不如重新編譯舊的 php 以鏈接到更新的庫。

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

這將構建 php 並將其鏈接到較新的庫。 我發現reinstall不太奏效; 當目標文件夾已經存在時,新安裝會阻塞。

我還為我的環境做了brew link --force php@7.2

我遇到了問題,因為我的 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 uninstall --ignore-dependencies node icu4c
brew install node

在我的情況下,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 后也出現此錯誤。 我解決了只升級我的舊 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,(其他版本相同的步驟),您需要:

  1. 使用此版本的 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. [您的用戶名]/homebrew-versions/Formula/
  2. 將下載的文件放入“公式”文件夾
  3. brew tap [yourUsername]/homebrew-versions
  4. brew install [yourUsername]/homebrew-versions/icu4c
  5. 你說對了!

其中 [yourUsername] 是您的 GitHub 帳戶或已經擁有所需版本的人的名稱。

不幸的是,最新的自制軟件不再發出警告,現在顯示錯誤:錯誤:從 GitHub 提交 URL 調用安裝 XXX 已禁用! 改用“brew extract XXX”來穩定地點擊 GitHub。 所以現在要走的路是在 github 上創建一個名為 homebrew-versions 的新存儲庫,以在 Tap 中托管公式然后使用以下命令對其進行初始化: brew tap-new MYORG/homebrew-versions 按照 Shine Hugh 的建議在 git 克隆自制存儲庫后,將原始 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

我通過更新所有 R 包解決了 int 問題:

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

如果您擁有最新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時,這些符號鏈接會消失,但這可能是最快的修復方法。

【2022 年自建版】

在 Mac OS 11.6.8 Big Sur 上為我工作。

$ 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再次工作。

參考

很多關於恢復icu4c缺失版本的答案。 我在使用postgresql時遇到了同樣的錯誤,我想這可以通過依賴於動態鏈接該庫的各種程序來體現。

對我來說,我使用的是postgresql的特定版本,即postgresql@12 我發現最簡單的解決方法是重新安裝

brew reinstall postgresql@12

我想這也適用於php

我在這里嘗試了很多建議,最后brew upgrade php對我來說是訣竅,但似乎問題無處不在

就我而言,我重新安裝了使用 Homebrew 安裝的所有軟件包

$ brew list | xargs brew reinstall

之后,我開始安裝我需要的版本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM