dyld: biblioteka nie załadowana: /usr/local/opt/icu4c/lib/libicui18n.62.dylib błąd uruchamiania php po zainstalowaniu węzła z brew na Macu


280

Zainstalowałem węzeł za pomocą homebrew (Mojave), potem php przestał działać i jeśli spróbuję uruchomić, php -vpojawia się ten błąd:

php -v
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib
  Referenced from: /usr/local/bin/php
  Reason: image not found

Próbowałem odinstalować zarówno węzeł, jak i icu4c, ale problem nadal występuje


Czy zainstalowałeś również php z Homebrew? Czy próbowałeś ponownie zainstalować php?
Ortomala Lokni

1
Dla potomnych: odinstaluj / zainstaluj ponownie przędzę / węzeł.
Nathaniel Ford

12
zgodnie z moim zrozumieniem dzieje się tak, gdy masz niedopasowane zależności wersji. w moim przypadku polecenie „brew upgrade” naprawiło moje problemy. proszę mnie poprawić, jeśli się mylę w jakikolwiek sposób.
sh6210

Odpowiedzi:


387

Uwaga - spowoduje to uaktualnienie twojej wersji PHP.

Właśnie miałem ten sam problem. Ulepszenie Homebrew, a następnie sprzątanie działało dla mnie. Ten błąd prawdopodobnie pojawił się dla mnie z powodu niedopasowania w wersjach pakietów. Żadne z powyższych rozwiązań nie rozwiązało mojego błędu, ale uruchomiły następujące polecenia homebrew.

brew upgrade

Uwaga - spowoduje to uaktualnienie wszystkich twoich opakowań parzenia. Jeśli chcesz tylko uaktualnić określone pakiety, upewnij się, że są określone.

brew upgrade // for upgrading all packages -- this is the command I used

brew upgrade {package} // for upgrading a specific package

i wtedy

brew cleanup

40
To było ... łatwe
Alan

7
Myślę, że nie jest to dobry pomysł dla tych, którzy mają środowisko z dwiema wersjami PHP, takimi jak ja. Również brew upgrade zaktualizuje twoją wersję PHP i nie jest to konieczne dobre, jeśli twoim celem nie jest aktualizacja PHP, ale rozwiązanie błędu biblioteki.
mpoletto

1
To najlepsze rozwiązanie, jakie do tej pory wypróbowałem, wybrana odpowiedź nie zadziałała
Alleo Indong

5
Nie zrobiłbym tego, ponieważ brew upgradezaktualizuje wszystkie wasze nieaktualne pakiety napoju, zamiast tego prawdopodobnie tylko zrób brew upgrade npmlub konkretny pakiet, nie wszystkie.
xgMz

2
@xgMz Masz rację. Dla mnie nie obchodziło mnie, czy aktualizuję wszystkie moje pakiety, ale dla kogoś, kto nie chce, to prawdopodobnie nie jest świetne. Dodałem notatkę do mojego rozwiązania. Dzięki!
Vim Diesel

278

W moim przypadku stało się tak, ponieważ icu4c został zaktualizowany do wersji 63, ale mój lokalnie zainstalowany obraz postgres nadal odwoływał się do icu4c 62.1. Dlatego musiałem zmienić używaną wersję icu4c:

 brew info icu4c
 brew switch icu4c <version>

Gdzie versionjest zwracana zainstalowana wersjainfo


1
Dokładnie to samo mi się przydarzyło i doprowadziłeś mnie na właściwy tor. Głównym zastrzeżeniem tego podejścia jest to, że musisz wcześniej zainstalować tę wersję. Obejrzałem to w swojej odpowiedzi
Leland

19
Nie zainstalowałem 62.1. brew list icu4cpokazał pliki z /usr/local/Cellar/icu4c/63.1. brew switch icu4c 63.1naprawiłem to dla mnie.
Steven Ensslen

3
Znalazłem tę stronę po znalezieniu tego błędu w moich logach Postgres. Próbowałem również, brew switch icu4c 63.1ale nadal pojawia się ten sam błąd w logach, nawet po ponownym uruchomieniu postgres. Nie jestem pewien, co robić dalej ...
Andrew

27
Skończyło się bieganie brew reinstall postgresi to chyba rozwiązało moje problemy
Andrew

1
Pomaga przełączyć się na icu4c 61.1. 63.1- nie rozwiązuje. 62.1- nie znaleziono.
Pavel Petrovich

81

Jestem właściwie zaskoczony, że to rozwiązanie nie zostało jeszcze zaprezentowane i wydaje mi się, że jest to najłatwiejsze rozwiązanie.

Idź do GitHub, znajdź wersję pliku browaru, która odpowiada wersji icu4c, której potrzebujesz, i uzyskaj surową wersję pliku (skorzystaj z linków powyżej i kliknij View Filewtedy Raw).

Następnie wystarczy ponownie zainstalować brew z tego adresu URL.

Na przykład wersja 62.1:

brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/575eb4bbef683551e19f329f60456b13a558132f/Formula/icu4c.rb

Na przykład wersja 64.2:

brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/a806a621ed3722fb580a58000fb274a2f2d86a6d/Formula/icu4c.rb

2
ratujesz życie!
Brad Kent

1
To jest rzeczywiście najlepsze rozwiązanie, jeśli brew switch icu4c 62.1nie działa w pierwszej kolejności.
saberprashant

1
To jedyna rzecz, która działała dla mnie po wielu godzinach próbowania naprawy npm. Dzięki!
galfisher

18
Działa świetnie! Aby naprawić błąd, dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylibpolecenie to naprawiło:brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/a806a621ed3722fb580a58000fb274a2f2d86a6d/Formula/icu4c.rb
John Kary,

2
Dla icu4c 66 :brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/22fb699a417093cd1440857134c530f1e3794f7d/Formula/icu4c.rb
Magnus W

70

Okazuje się, że ja, podobnie jak @ Grey Black, musiałem zainstalować wersję 62.1 icu4c. Nic innego nie działało.

brew switch icu4c 62.1Działa to jednak tylko wtedy, gdy w przeszłości zainstalowano 62.1. Jeśli nie masz, jest więcej pracy nóg. Homebrew nie ułatwia instalacji poprzednich wersji formuł.

Oto jak to zrobiłem:

  1. Najpierw potrzebujemy głębokiego klonu repozytorium Homebrew. To może zająć chwilę:git -C $(brew --repo homebrew/core) fetch --unshallow
  2. brew log icu4cwyśledzić zatwierdzenie, które odwołuje się do 62.1; 575eb4bZrób sztuczkę.
  3. cd $(brew --repo homebrew/core)
  4. git checkout 575eb4b -- Formula/icu4c.rb
  5. brew uninstall --ignore-dependencies icu4c
  6. brew install icu4cPowinieneś teraz mieć poprawną wersję zależności! Teraz tylko ...
  7. git reset && git checkout . Oczyść zmodyfikowany przepis.

Kiedy to robię brew log icu4c, są tylko 3-4 wyniki. Żadna wzmianka 62.1. Hash, którego używasz powyżej, również nie działa. Czy usunęli 62?
Noe,

2
Powinieneś najpierw zrobić, git -C (brew --repo homebrew/core) fetch --unshallowaby upewnić się, że masz pełną historię gitów.
Noah

44
Tyle dramatu dla ulepszenia przędzy.
Eric Walker,

4
To jedyne dostępne rozwiązanie, które dla mnie zadziałało, dziękuję! W moim przypadku problemem był pakiet ffmpeg, który, jak zakładam, zainstalował nowszą wersję icu4c. Ani aktualizacja, ani aktualizacja browaru nie działała, ani ponowna instalacja, ponowne łączenie, budowanie php ze źródła.
gedijedi

5
W moim przypadku potrzebowałem icu4c v63, więc powiązane zatwierdzenie do kasy to bc0c97952453ff6afc146aa3a706e9902aba4300 . Poleceniem git jest, git checkout bc0c97952453ff6afc146aa3a706e9902aba4300 -- Formula/icu4c.rba następniebrew switch 63.1
nahuelhds

39

Miałem ten sam problem po aktualizacji macOSdo wersji 10.13.6. Nie mogę biegać composeri phpwydawać poleceń. Po dłuższym badaniu i wypróbowaniu różnych rozwiązań opublikowanych online, przeinstalowanie php przy użyciu homebrewdziałało.

brew reinstall php@7.1

Dodano 14 marca na podstawie komentarza Ryana

pobierz wersję, której obecnie używasz, php -vi uruchom odpowiednie formuły (które możesz znaleźć tutaj: https://formulae.brew.sh/formula/php ) i zastąp @7.1je powyższym poleceniem.


8
Dostałem ten sam błąd nodepo uaktualnieniu systemu macOS do 10.14.2, brew reinstall nodebył również biletem dla mnie
gnmerritt

Zacząłem dostawać ten błąd po zainstalowaniu nowego pakietu z naparem. Robi brew upgradestałe to dla mnie.
samuraj jack

1
brew reinstall phpmoże skończyć się instalacją innej wersji niż bieżąca. Może być konieczne określenie wersji za pomocąphp@7.1
Ryan

3
nie możesz pobrać bieżącej wersji, php -vjeśli twój php jest uszkodzony: p
gingerCodeNinja

1
@gingerCodeNinja to prawda, być może może to pomóc: w systemie Mac OS przejdź do terminalu i uruchom echo $PATH(jeśli tak php, powinieneś zobaczyć coś takiego :) /usr/local/opt/php@7.2/binjest to jeden ze sposobów, aby dowiedzieć się, które wersje są obecnie używane.
Arun Karnati

33

Uruchom npm versioni sprawdź, czy widzisz ten sam błąd.

Jeśli tak, zaktualizuj swoją wersję 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

Kredyty


15

Naprawiłem to dla mnie:

brew upgrade node

1
To również działało dla mnie. Nigdy go w pełni nie zbadałem, ale uważam, że browar naprawił również zależności podczas aktualizacji węzła. To było znacznie bardziej ograniczone w porównaniu do aktualizacji naparu.
hendrikbeck

1
wydaje się podobny przypadek,> „węzeł reinstalacji parzenia” pomógł mi po przejściu na Catalinę
greencrest

9

Po prostu brew remove phpi brew install phpnie działało, ani nie działało brew reinstall php. Moje rozwiązanie polegało na:

brew remove php
cd /usr/local/Cellar
rm -rf php/
brew install php
brew doctor
brew cleanup

Teraz php -vdaje mi:

PHP 7.3.2 (cli) (built: Feb 14 2019 10:08:45) ( NTS )

5

Wydaje się, że nie można połączyć icu4cza pomocą brewnajnowszej aktualizacji OS X. Co czyni rzeczy bardziej interesującymi. Jedyne rozwiązanie, które dla mnie działało:

  1. Pobierz i skompiluj icu4c62.1 do/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. Łącza lib:
ln -s /usr/local/icu4c/62.1/lib/*.dylib /usr/local/include/
  1. Ustaw DYLD_LIBRARY_PATHw ~/.bash_profile:
export DYLD_LIBRARY_PATH=/usr/local/include

1
Używam PHP 7.1 i to była jedyna rzecz, która działała dla mnie.
WebTigers

W moim przypadku potrzebowałem wersji 64.2, więc pobrałem
RafaelQm



2

Dla mnie brew reinstall nodejsto naprawiłem - mój problem polegał na uruchomieniu Elixir / Phoenix, więc nie jest specyficzny dla PHP, myślę, że był to spowodowany brew install postgres, ale ponowna instalacja nie pomogła. Otrzymywałem to z npmpoleceń.


2

brew update && brew upgrade pracował dla mnie


Witamy w SO! Twoja współpraca jest mile widziana. W takim przypadku jest jeszcze 15 pytań, więc dobrze będzie pokazać swoje zalety.
David García Bodego,

1

Zamiast instalować starą wersję tego icu4c, do którego stary (wstępnie skompilowany) php może się połączyć, lepiej ponownie skompilować stary php, aby połączyć się z nowszą biblioteką.

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

Spowoduje to zbudowanie php i połączenie go z nowszą biblioteką. znalazłemreinstall że nie całkiem działa; nowa instalacja została uduszona, gdy folder docelowy już istniał.

Zrobiłem też brew link --force php@7.2dla mojego środowiska.


Próbowałem tego, ale bez poprawy; brew switch icu4c 62.1Jednak polecenie Greya Blacka działało dla mnie.
Jamie Birch

1

Odpowiedź Lelanda działała dla mnie, ale musiałem zmienić kroki 4 i 6, aby:

4) Git Checkout -B icu4c-62.1 575eb4b

6) ponownie zainstaluj napar Formula / icu4c.rb


1

Aby obniżyć wersję, musiałem ponownie skompilować ze źródła (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



1

To w końcu dla mnie zadziałało.

brew reinstall postgres

Po uruchomieniu powyższego polecenia może być konieczne uruchomienie

brew postgresql-upgrade-database

aby uzyskać dostęp do swoich poprzednich danych.


Po próbie przede wszystkim tylko to zadziałało dla mnie.
Kripalu Sar

0

Ten błąd też pojawia się po zainstalowaniu php 7.3. Rozwiązałem problem aktualizacji tylko moich starych wersji php (5.6 i 7.0, nie z oficjalnych repozytoriów).

Opiekunowie skompilowali nowe wersje php dla obecnego icu4c.

W moim przypadku PHP 7 uzyskał od 0,31 do 0,33 i problem został rozwiązany.


Czy nie obejmują tego inne odpowiedzi?
JJ dla Transparency and Monica

IMO, nr Jedna odpowiedź mówi o ponownej kompilacji, a to, co muszę zrobić, to „aktualizacja”.
David Fernández Rafael

Ten błąd też dostałem po aktualizacji z nieoficjalnego repozytorium, ale węzeł aktualizacji brew naprawił go.
user3685048


-1

w moim przypadku ponownie instaluję wszystkie pakiety zainstalowane z Homebrew

$ brew list | xargs brew reinstall

Następnie zaczynam instalować potrzebną wersję

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.