Avatar ·

Ошибка dyld: Library not loaded: libicui18n.62.dylib после установки Node.js через Homebrew

Всем привет! Я новичок в PHP, работаю на Mac. Сегодня решил установить Node.js через Homebrew (команда `brew install node`), и после этого мой PHP перестал работать. При попытке запустить любой скрипт, например: ```php ``` я получаю ошибку в терминале: ``` dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib Referenced from: /usr/local/bin/php Reason: image not found ``` PHP установлен тоже через Homebrew. До установки Node всё работало нормально. Вероятно, Homebrew обновил какие-то библиотеки, и PHP теперь не может найти нужную версию icu4c. Я пробовал переустановить PHP через `brew reinstall php`, но это не помогло. Мой Mac работает на macOS Monterey. Подскажите, как исправить эту ошибку? Заранее спасибо! <<>>

Причина ошибки

Проблема возникает из-за того, что Homebrew при установке Node.js обновил библиотеку icu4c до новой версии, а PHP продолжает ссылаться на старую версию (62). Это типичная ситуация для macOS, когда динамические библиотеки (dylib) теряют связь с исполняемыми файлами.

Решение: перелинковка или переустановка icu4c

Вот проверенный способ, который помогает в 90% случаев. Выполните последовательно команды в терминале:

# 1. Узнайте, какая версия icu4c установлена сейчас
brew list icu4c --versions

# 2. Если версия отличается от 62, нужно принудительно установить старую версию
# Сначала удалите текущую версию icu4c
brew uninstall --ignore-dependencies icu4c

# 3. Установите конкретную версию, которая нужна вашему PHP
# Обычно это icu4c@62 или icu4c@68 (зависит от версии PHP)
brew install icu4c@62

# 4. Сделайте симлинк, чтобы PHP мог найти библиотеку
brew link --force icu4c@62

# 5. Переустановите PHP, чтобы он пересобрался с правильной версией
brew reinstall php

Если команда brew install icu4c@62 выдаёт ошибку "No available formula", значит, эту версию удалили из репозитория. Тогда используйте альтернативный подход:

# 1. Удалите PHP и icu4c
brew uninstall php
brew uninstall --ignore-dependencies icu4c

# 2. Очистите кэш Homebrew
brew cleanup

# 3. Установите всё заново
brew install php
brew install node

Дополнительная диагностика

Если ошибка остаётся, проверьте, какие библиотеки ищет PHP:

# Покажет, какие dylib требуются
otool -L /usr/local/bin/php | grep icu

Вы должны увидеть путь вида /usr/local/opt/icu4c/lib/libicui18n.62.dylib. Если он указывает на другую версию (например, 68), то проблема именно в несоответствии.

Важные моменты

  • После переустановки PHP может потребоваться перезапустить веб-сервер, если вы используете Apache или Nginx.
  • Проверьте версию PHP: php -v — она должна отображаться без ошибок.
  • Если вы используете несколько версий PHP (например, через phpbrew), убедитесь, что активна правильная версия.

Этот метод решает проблему в 95% случаев, так как восстанавливает соответствие между версиями библиотек.

<<>>

Альтернативный подход: ручная установка через symlink

Если переустановка не помогла, можно вручную создать симлинк на нужную библиотеку. Это быстрее, но менее надёжно.

# 1. Найдите, где лежит библиотека icu4c
find /usr/local -name "libicui18n.*.dylib" 2>/dev/null

# 2. Если есть версия 68, создайте симлинк с именем 62
ln -s /usr/local/opt/icu4c/lib/libicui18n.68.dylib /usr/local/opt/icu4c/lib/libicui18n.62.dylib

# 3. Повторите для всех отсутствующих библиотек (libicuuc, libicudata и т.д.)
# Полный список можно получить из otool -L /usr/local/bin/php

Это временное решение. Рекомендую в долгосрочной перспективе перейти на использование Laravel Valet или Docker для изоляции окружения PHP от системных библиотек. Например, с Docker вы можете указать конкретную версию PHP и icu4c в Dockerfile, и такие проблемы не возникнут.

Также проверьте, не установлен ли PHP через другой менеджер (MacPorts, официальный инсталлятор) — это может вызвать конфликт библиотек.