dyld: bibliothèque non chargée: erreur /usr/local/opt/icu4c/lib/libicui18n.62.dylib lors de l'exécution de php après l'installation de node avec brew sur Mac


284

J'ai installé le noeud en utilisant homebrew (Mojave), ensuite php a cessé de fonctionner et si j'essaye de courir php -vj'obtiens cette erreur:

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

J'ai essayé de désinstaller le nœud et icu4c mais le problème persiste


Avez-vous également installé php depuis Homebrew? Avez-vous essayé de réinstaller php?
Ortomala Lokni

1
Pour la postérité: désinstaller / réinstaller fil / nœud semble faire l'affaire.
Nathaniel Ford

12
selon ma compréhension, cela se produit lorsque vous avez des dépendances de version incompatibles. dans mon cas, la commande "brew upgrade" a corrigé mes problèmes. veuillez me corriger, si je me trompe de quelque façon que ce soit.
sh6210

Réponses:


393

Remarque - Cela mettra à niveau votre version PHP.

Je viens d'avoir ce même problème. La mise à niveau de Homebrew puis le nettoyage ont fonctionné pour moi. Cette erreur est probablement apparue pour moi en raison d'une incompatibilité dans les versions de package. Aucune des solutions ci-dessus n'a résolu mon erreur, mais l'exécution des commandes homebrew suivantes l'a fait.

brew upgrade

Attention - Cela mettra à niveau tous vos paquets d'infusion. Si vous souhaitez uniquement mettre à niveau des packages spécifiques, assurez-vous d'être spécifique.

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

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

puis

brew cleanup

40
C'était ... facile
Alan

7
Je pense que ce n'est pas une bonne idée pour ceux qui ont un environnement avec deux versions de PHP comme moi. En outre, la mise à niveau de brew mettra à niveau votre version PHP et ce n'est pas nécessaire si votre objectif n'est pas de mettre à niveau votre PHP, mais de résoudre une erreur de bibliothèque.
mpoletto

1
C'est la meilleure solution que j'ai essayée jusqu'à présent, la réponse sélectionnée n'a pas fonctionné
Alleo Indong

5
Je ne ferais pas cela parce que brew upgrademettra à niveau tous vos packages obsolètes, au lieu de cela, probablement uniquement brew upgrade npmou un package spécifique, pas tous.
xgMz

2
@xgMz Vous avez raison à ce sujet. Pour moi, je me moquais si je mettais à jour tous mes paquets, mais pour quelqu'un qui ne veut pas, alors ce n'est probablement pas génial. J'ai ajouté une note à ma solution. Merci!
Vim Diesel

280

Dans mon cas, cela s'est produit car icu4c a été mis à niveau vers la version 63 mais mon image postgres installée localement faisait toujours référence à icu4c 62.1. J'ai donc dû changer la version icu4c utilisée:

 brew info icu4c
 brew switch icu4c <version>

versionest la version installée retournée parinfo


1
C'est exactement ce qui m'est arrivé aussi, et tu m'as mis sur la bonne voie. La mise en garde majeure à cette approche est que vous devez avoir préalablement installé cette version. J'ai travaillé autour de cela dans ma réponse
Leland

19
Je n'avais pas 62.1 installé. brew list icu4ca montré un fichier de /usr/local/Cellar/icu4c/63.1. brew switch icu4c 63.1réparé pour moi.
Steven Ensslen

3
J'ai trouvé cette page après avoir trouvé cette erreur dans mes journaux Postgres. J'ai également essayé brew switch icu4c 63.1mais j'obtiens toujours la même erreur dans les journaux, même après le redémarrage de postgres. Je ne sais pas quoi faire ensuite ...
Andrew

27
J'ai fini par courir brew reinstall postgreset cela a semblé résoudre mes problèmes
Andrew

1
Aide à passer à icu4c 61.1. 63.1- pas résolu. 62.1- pas trouvé.
Pavel Petrovich

82

Je suis en fait assez surpris que cette solution n’ait pas encore été présentée et j’ai l’impression que c’est la solution la plus simple.

Accédez à GitHub, recherchez la version du fichier de brassage qui correspond à la version icu4cdont vous avez besoin et obtenez la version brute du fichier (suivez les liens ci-dessus et cliquez View Fileensuite Raw).

Ensuite, il suffit de réinstaller brew à partir de cette URL.

Par exemple, version 62.1:

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

Par exemple, version 64.2:

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

2
tu es un sauveur!
Brad Kent

1
C'est en fait la meilleure solution si, brew switch icu4c 62.1ne fonctionne pas pour vous en premier lieu.
saberprashant

1
C'est la seule chose qui a fonctionné pour moi après des heures à essayer de réparer npm. Merci!
galfisher

18
Fonctionne très bien! Pour corriger l'erreur, dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylibcette commande l'a corrigé:brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/a806a621ed3722fb580a58000fb274a2f2d86a6d/Formula/icu4c.rb
John Kary

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

70

Il s'avère que, comme @Grey Black, j'ai dû installer la v62.1 d'icu4c. Rien d'autre n'a fonctionné.

Cependant, brew switch icu4c 62.1ne fonctionne que si vous avez installé 62.1 dans le passé. Si ce n'est pas le cas, il y a plus de travail à faire. Homebrew ne facilite pas l'installation des versions précédentes des formules.

Voici comment je l'ai fait:

  1. Nous avons d'abord besoin d'un clone profond du repo Homebrew. Cela peut prendre un peu de temps:git -C $(brew --repo homebrew/core) fetch --unshallow
  2. brew log icu4cpour retrouver un commit qui référence 62.1; 575eb4bfait l'affaire.
  3. cd $(brew --repo homebrew/core)
  4. git checkout 575eb4b -- Formula/icu4c.rb
  5. brew uninstall --ignore-dependencies icu4c
  6. brew install icu4cVous devriez maintenant avoir la bonne version de la dépendance! Maintenant juste pour ...
  7. git reset && git checkout . Nettoyez votre recette modifiée.

Quand je le fais brew log icu4c, il n'y a que 3-4 résultats. Aucun ne mentionne 62.1. Le hachage que vous utilisez ci-dessus ne fonctionne pas non plus. En ont-ils retiré 62?
Noah

2
Vous devez d'abord faire git -C (brew --repo homebrew/core) fetch --unshallowpour vous assurer que vous avez un historique complet de brassage.
Noah

44
Tant de drame pour une mise à niveau du fil.
Eric Walker

4
C'est la seule solution qui a fonctionné pour moi, merci! Dans mon cas, le problème était le paquet ffmpeg qui, je suppose, a installé une version plus récente de icu4c. Ni la mise à jour, ni la mise à niveau de brew n'a fonctionné, ni la réinstallation, la liaison, la construction de php à partir de la source.
gedijedi

5
Dans mon cas, j'ai eu besoin d'icu4c v63, donc l'engagement de paiement associé est bc0c97952453ff6afc146aa3a706e9902aba4300 . La commande git est git checkout bc0c97952453ff6afc146aa3a706e9902aba4300 -- Formula/icu4c.rbet puisbrew switch 63.1
nahuelhds

39

J'ai eu le même problème après avoir mis macOSà niveau ma version 10.13.6. Je ne peux pas exécuter composeret phpcommander. Après avoir recherché pendant un certain temps et essayé diverses solutions publiées en ligne, la réinstallation de php à l'aide de homebrewtravaillé.

brew reinstall php@7.1

Ajouté le 14 mars sur la base du commentaire de Ryan

obtenez la version que vous utilisez actuellement en exécutant php -vet obtenez les bonnes formules (que vous pouvez trouver ici: https://formulae.brew.sh/formula/php ) à remplacer @7.1dans la commande ci-dessus.


8
J'ai eu la même erreur en cours d'exécution nodeaprès la mise à niveau de macOS vers 10.14.2, brew reinstall nodeétait le ticket pour moi aussi
gnmerritt

J'ai commencé à obtenir cette erreur après avoir installé un nouveau package avec brew. Faire l'a brew upgradecorrigé pour moi.
samurai jack

1
brew reinstall phppeut finir par installer une version différente de la version actuelle. Vous devrez peut-être spécifier la version à l'aide dephp@7.1
Ryan

3
vous ne pouvez pas obtenir la version actuelle en exécutant php -vsi votre php est cassé: p
gingerCodeNinja

1
@gingerCodeNinja c'est vrai, cela pourrait peut-être aider: pour Mac OS, allez dans le terminal et exécutez echo $PATH(si vous l'avez php, vous devriez voir quelque chose comme ça :) /usr/local/opt/php@7.2/bin), c'est une façon de savoir quelles versions sont actuellement utilisées.
Arun Karnati

34

Exécutez npm versionet voyez si vous voyez la même erreur.

Si c'est le cas, mettez à niveau votre 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

Crédits


15

Cela m'a corrigé:

brew upgrade node

1
Cela a également fonctionné pour moi. Je ne l'ai jamais complètement étudié, mais je pense que brew a également corrigé les dépendances lors de la mise à niveau du nœud. Cela semblait beaucoup plus contenu par rapport à la mise à niveau de l'infusion.
hendrikbeck

1
semble un cas similaire,> 'brasser réinstaller le nœud' m'a aidé après le passage à Catalina
greencrest

9

Juste brew remove phpet brew install phpn'a pas fonctionné, pas plus brew reinstall php. Ma solution était de faire:

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

Me php -vdonne maintenant :

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

5

Il semble qu'il soit impossible de créer un lien à l' icu4caide brewde la dernière mise à jour d'OS X. Ce qui rend les choses plus intéressantes. La seule solution que j'ai trouvée fonctionnant pour moi:

  1. Téléchargez et compilez icu4c62.1 pour/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. Lier les bibliothèques:
ln -s /usr/local/icu4c/62.1/lib/*.dylib /usr/local/include/
  1. Situé DYLD_LIBRARY_PATHdans ~/.bash_profile:
export DYLD_LIBRARY_PATH=/usr/local/include

1
J'utilise PHP 7.1 et c'est la seule chose qui a fonctionné pour moi.
WebTigers

Dans mon cas, j'avais besoin de la version 64.2, donc je l'ai téléchargée depuis github.com/unicode-org/icu/releases/download/release-64-2/…
RafaelQm

3

Sur MacOS Mojave, la seule façon de résoudre ce problème était avec brew upgrade



2

Pour moi, brew reinstall nodejscela a été résolu - mon problème était avec l'exécution d'Elixir / Phoenix, donc pas spécifique à PHP, je pense que cela était dû à brew install postgres, mais la réinstallation n'a pas aidé. Je le recevais des npmcommandes.


2

brew update && brew upgrade travaillé pour moi


Bienvenue chez SO! Votre collaboration est la bienvenue. Dans ce cas, il y a 15 autres questions, donc ce sera un bon point pour montrer les avantages de la vôtre.
David García Bodego

2

C'est ce qui a finalement fonctionné pour moi.

brew reinstall postgres

Après avoir exécuté la commande ci-dessus, vous devrez peut-être exécuter

brew postgresql-upgrade-database

pour accéder à vos données précédentes.


Après avoir essayé avant tout, cela a fonctionné pour moi.
Kripalu Sar

1

Plutôt que d'installer une ancienne version de ce icu4cque l'ancien php (précompilé) peut lier, il est préférable de recompiler l'ancien php pour le lier à la bibliothèque la plus récente.

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

Cela va construire php et le lier à la nouvelle bibliothèque. J'ai trouvé que ça reinstallne fonctionnait pas tout à fait; la nouvelle installation s'est étouffée lorsque le dossier de destination existait déjà.

Je l'ai aussi fait brew link --force php@7.2pour mon environnement.


J'ai essayé ça mais pas d'amélioration; Le brew switch icu4c 62.1commandement de Gray Black a cependant fonctionné pour moi.
Jamie Birch

1

La réponse de Leland a fonctionné pour moi, mais j'ai dû changer les étapes 4 et 6 pour:

4) Git Checkout -B icu4c-62.1 575eb4b

6) Réinstallez la formule / icu4c.rb


1

Afin de rétrograder, j'ai dû recompiler à partir de la source (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

j'ai suivi cet article ici et cela semble être la pièce manquante du puzzle pour moi:

brew uninstall node@8


1

Sur OSX 10.15.4, l'exécution a xcode-select --installrésolu le problème pour moi.


0

Vous avez également cette erreur après l'installation de PHP 7.3. Je l'ai résolu en mettant à niveau uniquement mes anciennes versions de php (5.6 et 7.0, pas à partir des dépôts officiels).

Les mainteneurs avaient compilé de nouvelles versions de php contre l'icu4c actuel.

Dans mon cas, PHP 7 est passé de 0,31 à 0,33, et le problème a été résolu.


N'est-ce pas couvert par les autres réponses?
JJ for Transparency et Monica

OMI, non. Une réponse parle de recompilation, et ce que je dois faire, c'est "mettre à jour".
David Fernández Rafael

J'ai également eu cette erreur après la mise à niveau d'un dépôt non officiel, mais le nœud de mise à niveau de brew l'a corrigé.
user3685048


-1

dans mon cas, je réinstalle tous les packages installés avec Homebrew

$ brew list | xargs brew reinstall

Après cela, je commence à installer ma version dont j'ai besoin

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.