Introdução: quando o PHP para de fazer amizade com o Homebrew
\n\nVocê já passou pela situação em que tudo funcionava perfeitamente e, de repente, seu script PHP favorito exibe um erro de dar arrepios? Se você é desenvolvedor no macOS e instalou recentemente o Node.js via Homebrew, com certeza já viu essa mensagem assustadora:
\n\ndyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib\n Referenced from: /usr/local/bin/php\n Reason: image not found\n\nNão entre em pânico! Isso não é o fim do mundo, mas sim um conflito de versões da biblioteca ICU4C (International Components for Unicode for C). Essa situação é tão comum que no Stack Overflow essa pergunta já acumulou milhares de visualizações. Hoje vamos entender por que isso acontece e, principalmente, como corrigir de uma vez por todas.
\n\nPor que o erro libicui18n.62.dylib ocorre?
\n\nVamos entender a mecânica. A ICU4C é uma biblioteca para suporte a Unicode usada pelo PHP para trabalhar com internacionalização (funções como intl, mbstring e outras). Quando você instala o PHP via Homebrew, ele vincula-se a uma versão específica do ICU4C que estava atual no momento da instalação.
O problema surge quando você instala (ou atualiza) o Node.js via Brew. O Node.js também depende do ICU4C, e o Brew pode atualizar essa biblioteca para uma versão mais nova, removendo a antiga. Como resultado, o PHP fica com um "link morto" para o arquivo libicui18n.62.dylib, que já não existe mais. Daí o erro:
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib\n\n
Na prática, é um clássico conflito de dependências. A boa notícia é que a solução existe e é bem simples.
\n\nSoluções: do simples ao definitivo
\n\nSolução 1: Religar o ICU4C (correção rápida)
\n\nA maneira mais rápida é "lembrar" ao PHP onde a biblioteca está agora. O Homebrew armazena a versão atual do ICU4C em outro local, mas podemos criar um link simbólico.
\n\n- \n
- Primeiro, descubra qual versão do ICU4C está instalada: \n
brew list --versions icu4c\n\nVocê verá algo como icu4c 72.1 (o número da versão pode variar).
- \n
- Agora, crie o diretório que o PHP procura e faça o symlink: \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\nImportante: Substitua 72.1 pela sua versão do ICU4C. Se a versão for 73.0, o comando será:
sudo ln -s /usr/local/Cellar/icu4c/73.0/lib/libicui18n.dylib /usr/local/opt/icu4c/lib/libicui18n.62.dylib\n\nTeste se o PHP funciona:
\n\nphp -v\n\nSe aparecer a versão do PHP sem erros — parabéns, você conseguiu! Mas essa é uma solução temporária. Na próxima atualização do ICU4C, o link vai quebrar novamente.
\n\nSolução 2: Reinstalar o PHP via Brew (recomendado)
\n\nA abordagem mais correta é forçar o PHP a ser recompilado com a versão atual do ICU4C. Isso leva um pouco mais de tempo, mas resolve o problema de raiz.
\n\n- \n
- Primeiro, remova a versão atual do PHP (se existir): \n
brew uninstall php\n\n- \n
- Em seguida, reinstale o PHP, indicando explicitamente que deve usar a versão atual do ICU4C: \n
brew install php\n\nO Homebrew baixará a versão mais recente do ICU4C e recompilará o PHP com os links corretos. Após a instalação, verifique:
\n\nphp -v\nphp -m | grep intl\n\nO módulo intl deve aparecer na lista. Caso contrário, talvez seja necessário ativá-lo manualmente no php.ini, mas geralmente o Brew faz isso automaticamente.