So beheben Sie dyld: Library not loaded: libicui18n.62.dylib auf dem Mac nach der Node-Installation über Brew

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Wenn PHP nicht mehr mit Homebrew harmoniert

\n\n

Haben Sie schon einmal die Situation erlebt, in der alles einwandfrei funktionierte und dann – peng! – Ihr geliebtes PHP-Skript einen Fehler ausgibt, der einem die Haare zu Berge stehen lässt? Wenn Sie ein Entwickler auf macOS sind und kürzlich Node.js über Homebrew installiert haben, haben Sie diese furchterregende Meldung mit Sicherheit gesehen:

\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

Keine Panik! Das ist nicht das Ende der Welt, sondern lediglich ein Versionskonflikt der Bibliothek ICU4C (International Components for Unicode for C). Diese Situation ist so verbreitet, dass diese Frage auf Stack Overflow tausende Aufrufe gesammelt hat. Heute werden wir verstehen, warum das passiert, und vor allem, wie man es ein für alle Mal behebt.

\n\n

Warum tritt der Fehler libicui18n.62.dylib auf?

\n\n

Lassen Sie uns die Mechanik analysieren. ICU4C ist eine Bibliothek zur Unicode-Unterstützung, die PHP für die Arbeit mit Internationalisierung verwendet (Funktionen wie intl, mbstring und andere). Wenn Sie PHP über Homebrew installieren, wird es an eine bestimmte Version von ICU4C gebunden, die zum Zeitpunkt der Installation aktuell war.

\n\n

Das Problem tritt auf, wenn Sie Node.js über Brew installieren (oder aktualisieren). Node.js hängt ebenfalls von ICU4C ab, und Brew kann diese Bibliothek auf eine neue Version aktualisieren und dabei die alte entfernen. Infolgedessen bleibt PHP mit einem „toten Link“ auf die Datei libicui18n.62.dylib zurück, die nicht mehr existiert. Daher der Fehler:

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

Im Grunde ist dies ein klassischer Abhängigkeitskonflikt. Aber die gute Nachricht: Es gibt eine Lösung, und sie ist recht einfach.

\n\n

Lösungswege: Vom Einfachen zum Zuverlässigen

\n\n

Methode 1: Neulink von ICU4C (schnelle Lösung)

\n\n

Der schnellste Weg ist, PHP daran zu „erinnern“, wo die Bibliothek jetzt liegt. Homebrew speichert die aktuelle Version von ICU4C an einem anderen Ort, aber wir können einen symbolischen Link erstellen.

\n\n
    \n
  1. Finden Sie zunächst heraus, welche Version von ICU4C derzeit installiert ist:
  2. \n
\n\n
brew list --versions icu4c
\n\n

Sie sehen etwas wie icu4c 72.1 (die Versionsnummer kann abweichen).

\n\n
    \n
  1. Erstellen Sie nun das Verzeichnis, das PHP sucht, und legen Sie einen Symlink an:
  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

Wichtig: Ersetzen Sie 72.1 durch Ihre Version von ICU4C. Wenn die Version 73.0 ist, lautet der Befehl wie folgt:

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

Überprüfen Sie, ob PHP funktioniert:

\n\n
php -v
\n\n

Wenn Sie die PHP-Version ohne Fehler sehen – hurra, Sie haben gewonnen! Dies ist jedoch eine temporäre Lösung. Beim nächsten Update von ICU4C wird der Link erneut brechen.

\n\n

Methode 2: Neuinstallation von PHP über Brew (empfohlen)

\n\n

Ein korrekterer Ansatz ist, PHP dazu zu zwingen, sich mit der aktuellen Version von ICU4C neu zu kompilieren. Dies dauert etwas länger, löst das Problem aber an der Wurzel.

\n\n
    \n
  1. Entfernen Sie zunächst die aktuelle PHP-Version (falls vorhanden):
  2. \n
\n\n
brew uninstall php
\n\n
    \n
  1. Installieren Sie PHP dann neu und geben Sie explizit an, dass die aktuelle ICU4C-Version verwendet werden soll:
  2. \n
\n\n
brew install php
\n\n

Homebrew zieht automatisch die neueste Version von ICU4C und kompiliert PHP mit den korrekten Links neu. Überprüfen Sie nach der Installation:

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

Das Modul intl sollte in der Liste sein. Falls nicht – möglicherweise muss es manuell in der php.ini aktiviert werden, aber normalerweise erledigt Brew dies automatisch.

\n\n

Methode 3: Installation einer bestimmten ICU4C-Version

Blogs

Buchempfehlungen