Ошибка dyld: Library not loaded: libicui18n.62.dylib после установки Node.js через Homebrew
Причина ошибки
Проблема возникает из-за того, что 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, официальный инсталлятор) — это может вызвать конфликт библиотек.
Ответов пока нет.
Войдите чтобы оставить ответ