我日常的开发环境是 Manjaro Linux,PHP 是自己编译的 7.2。当我升级系统后(起初不知道升级了,电脑开机很久也没关机),发现我的 PHP 炸了!!!
php: error while loading shared libraries: libicui18n.so.73: cannot open shared object file: No such file or directory
报了这个错误~
libicui18n 是国际化组件 Unicode(ICU) 库的一部分,且 PHP 正是依赖它来处理国际化功能。
libicui18n.so.73 找不到了?估计是升级后变成 74 或者 75 了?还是被删了……
搜了资料发现可以自己安装:
yay -S icu
对了,如果你是其他发行版,可以参考以下命令:
# Ubuntu/Debian 系统
sudo apt-get update
sudo apt-get install libicu-dev
# CentOS/RHEL 系统
sudo yum update
sudo yum install libicu
# Fedora 系统
sudo dnf update
sudo dnf install libicu
然而,我发现我的系统中已经安装了 icu 库,确实是 74 版本:
ls /usr/lib/libicui18n.so.74
OK,那我创建一个符号链接,将已安装版本的库链接到 PHP 尝试加载的版本,这下总可以了吧!
sudo ln -s /usr/lib/libicui18n.so.74 /usr/lib/libicui18n.so.73
很意外,报了另一个错误?
php: error while loading shared libraries: libicuuc.so.73: cannot open shared object file: No such file or directory
继续:
sudo ln -s /usr/lib/libicuuc.so.74 /usr/lib/libicuuc.so.73
好家伙,又报另一个错:
php: error while loading shared libraries: libicudata.so.73: cannot open shared object file: No such file or directory
sudo ln -s /usr/lib/libicudata.so.74 /usr/lib/libicudata.so.73
补齐了以上 3 个符号链接后,我再次尝试运行 PHP,终于能用了!!!
如果你也遇到类似的报错,可以参考。不过,对于大版本的更新,有可能链接后是没办法工作的,这个时候还是重新编译 PHP 吧!
以后可能还会遇到这个问题,索性就记录下来,明天除夕,提前祝大家新你快乐~