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.