引言:每位Mac开发者的常见痛点
\n\n您通过Homebrew更新了Node.js,然后运行了您最喜欢的PHP脚本——突然看到了这个令人心惊胆战的消息:
\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冷静,保持冷静!如果您来到了这个页面,说明您既不是第一个,也不是最后一个遇到这个错误的开发者。在Stack Overflow上,这个问题已经积累了数千次浏览,这并非偶然:问题源于通过Homebrew安装或更新Node.js后,ICU4C(用于C语言的Unicode国际化组件)库的版本冲突。
\n\n在本教程中,我将向您展示三种修复此错误的有效方法,解释其根本原因,并给出实用建议,确保您再也不会看到这条消息。我们开始吧!
\n\n为什么会出现dyld: Library not loaded错误?
\n\n在着手修复之前,我们先来了解原因。这将帮助您更好地理解macOS和Homebrew的生态系统。
\n\n什么是ICU4C,它和PHP有什么关系?
\n\nICU4C是一个支持Unicode、国际化和本地化的库。PHP使用它来处理诸如mb_convert_encoding()、intl扩展等功能。Homebrew将ICU4C作为许多软件包的依赖项进行安装,包括PHP和Node.js。
导致错误的事件链
\n\n- \n
- 您通过
brew install node或brew upgrade node安装或更新Node.js。 \n - Node.js需要特定版本的ICU4C(例如62.x)。 \n
- Homebrew将ICU4C更新到新版本(例如63.x或64.x)。 \n
- 旧的库文件
libicui18n.62.dylib被删除。 - 使用版本62编译的PHP无法找到所需的库——从而崩溃并报错。
简单来说:PHP还停留在“过去”,而库已经进入了“未来”。
\n\n方法1:快速解决方案——重新链接ICU4C(推荐新手使用)
\n\n这是最简单快捷的方法,在90%的情况下都能解决问题。
\n\n步骤1:检查当前ICU4C版本
\n\n打开终端并执行:
\n\nbrew list --versions icu4c\n\n您会看到类似icu4c 63.1或64.2的信息。记下这个版本——后面会用到。
步骤2:将ICU4C重新链接到PHP
\n\n执行重新链接命令:
\n\nbrew link --force icu4c\n\n如果您看到版本不匹配的警告——不要惊慌。这是正常的。然后重新启动PHP:
\n\nwhich php\nphp -v\n\n如果错误消失了——您太棒了!如果没有——请转到下一个方法。
\n\n步骤3:替代方案——强制重新链接
\n\n如果上述命令无效,请尝试:
\n\nbrew reinstall icu4c\nbrew link --overwrite icu4c\n\n这将重新安装库并更新所有链接。
\n\n方法2:通过Homebrew重新安装PHP(适合喜欢干净环境的人)
\n\n如果重新链接无效——说明您的PHP是“绑定”在旧版ICU4C上的。最佳解决方案是重新安装PHP。
\n\n步骤1:卸载当前PHP版本
\n\nbrew uninstall php\n\n如果您有多个PHP版本(例如7.4和8.0),请全部卸载:
\n\nbrew uninstall php@7.4 php@8.0\n\n步骤2:清理Homebrew缓存
\n\nbrew cleanup\n\n步骤3:重新安装PHP
\n\nbrew install php\n\n或者,如果您需要特定版本:
\n\nbrew install php@8.1\n\n步骤4:检查功能是否正常
\n\n编写一个简单的PHP脚本来测试:<