Как исправить ошибку dyld с libicui18n.62.dylib после установки Node через Brew на Mac

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Введение: Знакомая боль каждого разработчика на Mac

Вы обновляли Node.js через Homebrew, запустили свой любимый PHP-скрипт — и вдруг видите это леденящее душу сообщение:

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

Спокойствие, только спокойствие! Если вы попали на эту страницу, значит вы — не первый и не последний разработчик, столкнувшийся с этой ошибкой. На Stack Overflow этот вопрос собрал тысячи просмотров, и не зря: проблема возникает из-за конфликта версий библиотеки ICU4C (International Components for Unicode for C) после установки или обновления Node.js через Homebrew.

В этом туториале я покажу вам три рабочих способа исправить ошибку, объясню её корень и дам полезные рекомендации, чтобы вы больше никогда не видели это сообщение. Поехали!

Почему возникает ошибка dyld: Library not loaded?

Прежде чем бросаться исправлять, давайте разберёмся в причинах. Это поможет вам лучше понимать экосистему macOS и Homebrew.

Что такое ICU4C и при чём тут PHP?

ICU4C — это библиотека для поддержки Unicode, интернационализации и локализации. PHP использует её для работы с функциями вроде mb_convert_encoding(), intl расширением и другими. Homebrew устанавливает ICU4C как зависимость для многих пакетов, включая PHP и Node.js.

Цепочка событий, приводящая к ошибке

  1. Вы устанавливаете или обновляете Node.js через brew install node или brew upgrade node.
  2. Node.js требует определённую версию ICU4C (например, 62.x).
  3. Homebrew обновляет ICU4C до новой версии (например, 63.x или 64.x).
  4. Старая библиотека libicui18n.62.dylib удаляется.
  5. PHP, который был скомпилирован с версией 62, не может найти нужную библиотеку — и падает с ошибкой.

Проще говоря: PHP остался «в прошлом», а библиотеки уже «в будущем».

Способ 1: Быстрое решение — перелинковка ICU4C (рекомендую для новичков)

Это самый простой и быстрый способ, который в 90% случаев решает проблему.

Шаг 1: Проверьте текущую версию ICU4C

Откройте Терминал и выполните:

brew list --versions icu4c

Вы увидите что-то вроде icu4c 63.1 или 64.2. Запомните версию — она пригодится.

Шаг 2: Перелинкуйте ICU4C с PHP

Выполните команду для перелинковки:

brew link --force icu4c

Если вы видите предупреждение, что версии не совпадают — не пугайтесь. Это нормально. Затем перезапустите PHP:

which php
php -v

Если ошибка исчезла — вы молодец! Если нет — переходите к следующему способу.

Шаг 3: Альтернативный вариант — принудительная перелинковка

Если команда выше не сработала, попробуйте:

brew reinstall icu4c
brew link --overwrite icu4c

Это переустановит библиотеку и обновит все ссылки.

Способ 2: Переустановка PHP через Homebrew (для тех, кто любит чистоту)

Если перелинковка не помогла — значит, ваш PHP «зашит» под старую версию ICU4C. Лучшее решение — переустановить PHP.

Шаг 1: Удалите текущую версию PHP

brew uninstall php

Если у вас несколько версий PHP (например, 7.4 и 8.0), удалите все:

brew uninstall php@7.4 php@8.0

Шаг 2: Очистите кеш Homebrew

brew cleanup

Шаг 3: Установите PHP заново

brew install php

Или, если вам нужна конкретная версия:

brew install php@8.1

Шаг 4: Проверьте работоспособность

Напишите простой PHP-скрипт для проверки:

<?php
// test.php
echo "ICU version: " . INTL_ICU_VERSION . "\n";
echo "ICU data version: " . INTL_ICU_DATA_VERSION . "\n";
echo "PHP works!\n";
?>

Запустите:

php test.php

Если увидите версию ICU без ошибок — всё в порядке.

Способ 3: Использование совместимой версии ICU4C (для продвинутых)

Иногда проект требует старую версию PHP, а новая ICU4C несовместима. В этом случае можно установить конкретную версию ICU4C.

Шаг 1: Найдите нужную версию ICU4C

Посмотрите, какая версия ICU4C требуется вашему PHP:

php -i | grep "ICU version"

Допустим, это версия 62. Тогда:

brew search icu4c

Если нужной версии нет в репозитории, придётся установить из исходников или использовать brew extract.

Шаг 2: Установите конкретную версию (пример для версии 62)

brew tap homebrew/core
brew extract --version=62 icu4c homebrew/cask

Затем установите:

brew install icu4c@62

И прилинкуйте:

brew link --force icu4c@62

Важно: Этот способ сложнее и может потребовать дополнительных танцев с бубном. Используйте его только если первые два не сработали.

Профилактика: Как больше никогда не попадать в эту ловушку

Лучшая ошибка — та, которую вы предотвратили. Вот несколько советов:

  • Используйте менеджеры версий. Для PHP — phpbrew или phpenv, для Node — nvm. Они изолируют версии библиотек.
  • Не обновляйте всё подряд. Перед brew upgrade читайте, что именно обновляется. Иногда лучше подождать.
  • Держите резервную

Блоги

Рекомендаций по книгам