一看到这个 libpng12.so.0 就觉得眼熟,之前在通过一个 shell 脚本安装环境时,因为需要安装的 php 版本有限制(项目限制),shell 脚本也过老,导致编译安装 php 和 nginx 时经常报错,因为安装的软件版本依赖与当前环境(ubuntu 20)中的依赖冲突。

这里的 libpng12.so 与 libpng16.so 冲突了,每次编译安装 nginx 都会出现这个错,填充之后,编译因为冲突而执行的解冲突指令会将 libpng12.so.0 删除,仿佛一个死循环,把人搞死。好在现在使用了 bt 面板,不需要去管依赖。现在找到 libpng12.so.0 并放到对应目录即可。

参考了 nginx启动报错:/usr/local/nginx/sbin/nginx: error while loading shared libraries: libcrypto.so.1.1 中的指令 ldd $(which nginx),查看动态库依赖关系。

...
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f06f53bc000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f06f53a1000)
libicuuc.so.66 => /lib/x86_64-linux-gnu/libicuuc.so.66 (0x00007f06f51bb000)
liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f06f5192000)
libjpeg.so.8 => /lib/x86_64-linux-gnu/libjpeg.so.8 (0x00007f06f4f37000)
libpng12.so.0 => not found
libfreetype.so.6 => /lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f06f4e78000)
libfontconfig.so.1 => /lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007f06f4c35000)
libXpm.so.4 => /lib/x86_64-linux-gnu/libXpm.so.4 (0x00007f06f4a23000)
... 

可以看到,除了 libpng12.so.0 连接指向 not found 以外,其他的动态库依赖都有具体指向的目录文件。也可以看出,当前的 nginx 显然把 /lib/x86_64-linux-gnu 作为依赖库存放地址。查看到 /lib/x86_64-linux-gnu/libpng12.so 指向了目录下的 libpng12.so.0,显然只要找到 libpng12.so.0 并复制到这个目录下就能修复问题。

find / -name *libpng12* 查看到 /usr/lib/libpng12.so.0,执行 cp /usr/lib/libpng12.so.0 /lib/x86_64-linux-gnu 复制,再次执行 nginx 指令,比如 nginx -t,可以没有看到报错了。