Introducción: cuando PHP deja de ser amigo de Homebrew
\n\n¿Alguna vez te has encontrado con una situación en la que todo funcionaba perfectamente y luego, ¡pum!, tu script PHP favorito muestra un error que te pone los pelos de punta? Si eres desarrollador en macOS y recientemente instalaste Node.js a través de Homebrew, seguramente has visto este temible mensaje:
\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\n¡No entres en pánico! Esto no es el fin del mundo, sino solo un conflicto de versiones de la librería ICU4C (International Components for Unicode for C). La situación es tan común que en Stack Overflow esta pregunta ha acumulado miles de visitas. Hoy entenderemos por qué ocurre y, lo más importante, cómo solucionarlo de una vez por todas.
\n\n¿Por qué ocurre el error libicui18n.62.dylib?
\n\nAnalicemos la mecánica. ICU4C es una librería para soporte de Unicode que PHP utiliza para trabajar con internacionalización (funciones como intl, mbstring y otras). Cuando instalas PHP a través de Homebrew, se vincula a una versión específica de ICU4C que estaba vigente en el momento de la instalación.
El problema surge cuando instalas (o actualizas) Node.js con Brew. Node.js también depende de ICU4C, y Brew puede actualizar esta librería a una nueva versión, eliminando la anterior. Como resultado, PHP se queda con un "enlace muerto" al archivo libicui18n.62.dylib, que ya no existe. De ahí el error:
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib\n\n
En esencia, es un conflicto de dependencias clásico. Pero la buena noticia es que hay solución, y es bastante sencilla.
\n\nMétodos de solución: de lo simple a lo confiable
\n\nMétodo 1: Reenlazar ICU4C (solución rápida)
\n\nLa forma más rápida es "recordarle" a PHP dónde está ahora la librería. Homebrew almacena la versión actual de ICU4C en otro lugar, pero podemos crear un enlace simbólico.
\n\n- \n
- Primero, averigua qué versión de ICU4C está instalada actualmente: \n
brew list --versions icu4c\n\nVerás algo como icu4c 72.1 (el número de versión puede variar).
- \n
- Ahora, creemos el directorio que PHP está buscando y hagamos el enlace simbólico: \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: Reemplaza 72.1 con tu versión de ICU4C. Si la versión es 73.0, el comando se vería así:
sudo ln -s /usr/local/Cellar/icu4c/73.0/lib/libicui18n.dylib /usr/local/opt/icu4c/lib/libicui18n.62.dylib\n\nVerifica si PHP funciona:
\n\nphp -v\n\nSi ves la versión de PHP sin errores, ¡enhorabuena, lo has logrado! Pero esta es una solución temporal. En la próxima actualización de ICU4C, el enlace se romperá de nuevo.
\n\nMétodo 2: Reinstalar PHP con Brew (recomendado)
\n\nUn enfoque más correcto es forzar a PHP a recompilarse con la versión actual de ICU4C. Esto tomará un poco más de tiempo, pero resolverá el problema de raíz.
\n\n- \n
- Primero, elimina la versión actual de PHP (si existe): \n
brew uninstall php\n\n- \n
- Luego, reinstala PHP indicando explícitamente que use la versión actual de ICU4C: \n
brew install php\n\nHomebrew descargará automáticamente la última versión de ICU4C y recompilará PHP con los enlaces correctos. Después de la instalación, verifica:
\n\nphp -v\nphp -m | grep intl\n\nEl módulo intl debería estar en la lista. Si no es así, es posible que debas habilitarlo manualmente en php.ini, pero normalmente Brew lo hace automáticamente.