Avatar ·

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

Всем привет! Я начинающий PHP-разработчик, работаю на Mac. Сегодня решил установить Node.js через Homebrew, чтобы попробовать какие-то фронтенд-инструменты. После установки, когда я пытаюсь запустить любой PHP-скрипт, например: ```php >>

Причина проблемы

Ошибка возникает из-за того, что Homebrew при установке Node.js (или другого пакета) обновил библиотеку icu4c (International Components for Unicode) до новой версии. Ваша версия PHP (особенно старая, собранная под icu4c версии 62) всё ещё ссылается на старую библиотеку libicui18n.62.dylib, которая была удалена или заменена.

Homebrew — это менеджер пакетов, который хранит библиотеки в папке /usr/local/opt/. Когда вы устанавливаете новый пакет, он может обновить общие зависимости (как icu4c), и старые версии библиотек удаляются. PHP, собранный под старую версию, перестаёт находить нужные файлы.

Решение: перелинковка или пересборка PHP

Самый надёжный способ — заставить PHP использовать текущую версию icu4c, которая установлена в системе. Для этого нужно перелинковать PHP с новой библиотекой или пересобрать его.

Выполните следующие шаги в терминале:

  1. Проверьте текущую установленную версию icu4c:
    brew list --versions icu4c

    Если версия не 62 (например, 72 или 74), то проблема подтверждена.

  2. Обновите PHP, чтобы он пересобрался с новой библиотекой:
    brew upgrade php

    Это может занять некоторое время, так как Homebrew перекомпилирует PHP с актуальными зависимостями.

  3. Если PHP уже последней версии, перелинкуйте его:
    brew reinstall php
  4. Проверьте, что ссылки на библиотеки корректны:
    otool -L /usr/local/bin/php | grep icu

    Вы должны увидеть пути к актуальной версии icu4c, например /usr/local/opt/icu4c/lib/libicui18n.74.dylib.

Если переустановка не помогла — ручная перелинковка

Иногда Homebrew не обновляет символические ссылки. Тогда можно сделать это вручную:

brew link --overwrite icu4c
brew link --overwrite php

После этого перезапустите терминал или выполните:

hash -r  # Очистить кеш путей

Профилактика в будущем

  • Старайтесь не устанавливать PHP через Homebrew, если вам нужна конкретная версия. Используйте phpbrew или Docker.
  • Перед установкой крупных пакетов (Node.js, Python) делайте бэкап Homebrew: brew bundle dump.
  • Регулярно обновляйте все пакеты: brew update && brew upgrade.

После выполнения этих шагов PHP должен заработать. Если ошибка осталась — проверьте, нет ли у вас нескольких версий PHP (например, системной и от Homebrew). Убедитесь, что в ~/.bash_profile или ~/.zshrc прописан правильный путь:

export PATH="/usr/local/opt/php/bin:$PATH"
<<>>

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

Если по каким-то причинам вы не хотите обновлять PHP (например, у вас легаси-проект, который требует именно старую версию icu4c), можно установить старую версию библиотеки из бэкапа Homebrew.

Выполните:

# Найти старую версию в кеше Homebrew
brew extract icu4c --version=62.1

# Установить её
brew install icu4c@62.1

# Принудительно залинковать
brew link --overwrite icu4c@62.1

Но этот метод не рекомендуется, так как старая библиотека может конфликтовать с другими программами. Лучше всё же обновить PHP.

Если ничего не помогает — используйте Docker

Самый простой способ избежать проблем с окружением на Mac — запускать PHP в контейнере Docker:

docker run -it --rm -v "$PWD":/app -w /app php:8.2-cli php test.php

Это полностью изолирует среду от Homebrew и системных библиотек.