编译PHP8.3Dockerfile报错“libicuio.so.76: cannot open shared object file: No such file or directory"


环境

Debian:trixie-slim
PHP版本:8.3

问题

在之前PHP8.2的Dockerfile基础上编译PHP8.3版本的Docker镜像报错如下:

PHP Warning:  PHP Startup: Unable to load dynamic library 'intl' (tried: /usr/local/lib/php/extensions/no-debug-non-zts-20230831/intl (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/intl: cannot open shared object file: No such file or directory), /usr/local/lib/php/extensions/no-debug-non-zts-20230831/intl.so (libicuio.so.76: cannot open shared object file: No such file or directory)) in Unknown on line 0

看错误是PHP无法加载intl扩展,原因是缺少底层依赖库 libicuio.so.76
intl扩展依赖ICU库:PHP 的intl(Internationalization) 扩展需要系统安装 ICU (International Components for Unicode) 库才能正常工作
在dockerfile中已经安装了libicu-dev,之前的PHP8.2的dockerfile也是同样的步骤没有出现问题。在编译阶段没有报错,可以正常编译出镜像。但是运行镜像的时候就会报上面的错误。

解决

在已经编译好镜像里查找libicu库文件

root@a452ab2db315:/var/webroot# ls -la /usr/lib/x86_64-linux-gnu/libicu*.so*
ls: cannot access '/usr/lib/x86_64-linux-gnu/libicu*.so*': No such file or directory

可以看到系统中根本没有安装 ICU (International Components for Unicode) 的共享库文件
在系统中搜索可用的libicu

# 更新包列表
apt-get update

# 搜索可用的 libicu 包
apt-cache search ^libicu

root@a452ab2db315:/var/webroot# apt-cache search ^libicu
libicu-dev - Development files for International Components for Unicode
libicu76 - International Components for Unicode
libicu4j-java - Library for Unicode support and internationalization
libicu4j-4.4-java - Library for Unicode support and internationalization

可以看到系统返回的libicu库文件为libicu76,在dockerfile中增加libicu76的安装

验证

root@a452ab2db315:/var/webroot# ls -la /usr/lib/x86_64-linux-gnu/libicu*.so*
lrwxrwxrwx 1 root root       18 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicudata.so.76 -> libicudata.so.76.1
-rw-r--r-- 1 root root 31864368 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicudata.so.76.1
lrwxrwxrwx 1 root root       18 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicui18n.so.76 -> libicui18n.so.76.1
-rw-r--r-- 1 root root  3774800 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicui18n.so.76.1
lrwxrwxrwx 1 root root       16 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicuio.so.76 -> libicuio.so.76.1
-rw-r--r-- 1 root root    59400 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicuio.so.76.1
lrwxrwxrwx 1 root root       18 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicutest.so.76 -> libicutest.so.76.1
-rw-r--r-- 1 root root    81248 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicutest.so.76.1
lrwxrwxrwx 1 root root       16 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicutu.so.76 -> libicutu.so.76.1
-rw-r--r-- 1 root root   228112 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicutu.so.76.1
lrwxrwxrwx 1 root root       16 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicuuc.so.76 -> libicuuc.so.76.1
-rw-r--r-- 1 root root  2230288 May 31 13:04 /usr/lib/x86_64-linux-gnu/libicuuc.so.76.1

# php -m | grep intl
intl

声明:初心|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 编译PHP8.3Dockerfile报错“libicuio.so.76: cannot open shared object file: No such file or directory"


愿你勿忘初心,并从一而终