Comment corriger dyld: Library not loaded: libicui18n.62.dylib sur Mac après l'installation de Node via Brew

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : quand PHP ne fait plus bon ménage avec Homebrew

\n\n

Avez-vous déjà été confronté à une situation où tout fonctionnait parfaitement, puis soudainement — boum ! — votre script PHP préféré affiche une erreur qui vous fait dresser les cheveux sur la tête ? Si vous êtes développeur sur macOS et que vous avez récemment installé Node.js via Homebrew, vous avez probablement vu ce message menaçant :

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

Ne paniquez pas ! Ce n'est pas la fin du monde, mais simplement un conflit de versions de la bibliothèque ICU4C (International Components for Unicode for C). Cette situation est si courante que cette question a recueilli des milliers de vues sur Stack Overflow. Aujourd'hui, nous allons comprendre pourquoi cela se produit et, surtout, comment le corriger une fois pour toutes.

\n\n

Pourquoi l'erreur libicui18n.62.dylib se produit-elle ?

\n\n

Examinons le mécanisme. ICU4C est une bibliothèque de support Unicode utilisée par PHP pour la gestion de l'internationalisation (fonctions comme intl, mbstring et autres). Lorsque vous installez PHP via Homebrew, il se lie à une version spécifique d'ICU4C qui était en vigueur au moment de l'installation.

\n\n

Le problème survient lorsque vous installez (ou mettez à jour) Node.js via Brew. Node.js dépend également d'ICU4C, et Brew peut mettre à jour cette bibliothèque vers une nouvelle version, supprimant l'ancienne. En conséquence, PHP reste avec un « lien mort » vers le fichier libicui18n.62.dylib, qui n'existe plus. D'où l'erreur :

\n\n
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib
\n\n

Il s'agit essentiellement d'un conflit de dépendances classique. Mais la bonne nouvelle, c'est qu'il existe une solution, et elle est assez simple.

\n\n

Méthodes de résolution : du simple au fiable

\n\n

Méthode 1 : Reliaison d'ICU4C (correctif rapide)

\n\n

La méthode la plus rapide consiste à « rappeler » à PHP où se trouve désormais la bibliothèque. Homebrew stocke la version actuelle d'ICU4C à un autre endroit, mais nous pouvons créer un lien symbolique.

\n\n
    \n
  1. Commencez par vérifier quelle version d'ICU4C est actuellement installée :
  2. \n
\n\n
brew list --versions icu4c
\n\n

Vous verrez quelque chose comme icu4c 72.1 (le numéro de version peut varier).

\n\n
    \n
  1. Créez maintenant le répertoire que PHP recherche et faites un lien symbolique :
  2. \n
\n\n
sudo mkdir -p /usr/local/opt/icu4c/lib\nsudo ln -s /usr/local/Cellar/icu4c/72.1/lib/libicui18n.dylib /usr/local/opt/icu4c/lib/libicui18n.62.dylib
\n\n

Important : Remplacez 72.1 par votre version d'ICU4C. Si la version est 73.0, la commande sera :

\n\n
sudo ln -s /usr/local/Cellar/icu4c/73.0/lib/libicui18n.dylib /usr/local/opt/icu4c/lib/libicui18n.62.dylib
\n\n

Vérifiez si PHP fonctionne :

\n\n
php -v
\n\n

Si vous voyez la version de PHP sans erreur — bravo, vous avez gagné ! Mais c'est une solution temporaire. Lors de la prochaine mise à jour d'ICU4C, le lien se brisera à nouveau.

\n\n

Méthode 2 : Réinstallation de PHP via Brew (recommandée)

\n\n

Une approche plus correcte consiste à forcer PHP à se recompiler avec la version actuelle d'ICU4C. Cela prendra un peu plus de temps, mais résoudra le problème à la racine.

\n\n
    \n
  1. Commencez par supprimer la version actuelle de PHP (si elle existe) :
  2. \n
\n\n
brew uninstall php
\n\n
    \n
  1. Ensuite, réinstallez PHP en indiquant explicitement d'utiliser la version actuelle d'ICU4C :
  2. \n
\n\n
brew install php
\n\n

Homebrew récupérera automatiquement la dernière version d'ICU4C et recompilera PHP avec les bons liens. Après l'installation, vérifiez :

\n\n
php -v\nphp -m | grep intl
\n\n

Le module intl doit figurer dans la liste. Si ce n'est pas le cas, il faudra peut-être l'activer manuellement dans php.ini, mais généralement Brew le fait automatiquement.

\n\n

Méthode 3 : Installation d'une version spécifique d'ICU4C

Blogs

Book Recommendations