今天为了本地编译一个开源软件,用 homebrew 安装了 rustc,结果后来发现导致 php 命令报错。

dyld[16856]: Library not loaded: /opt/homebrew/opt/libavif/lib/libavif.15.dylib
  Referenced from: <87C1A268-34E4-396F-8BBC-D5591064E333> /opt/homebrew/Cellar/gd/2.3.3_5/lib/libgd.3.dylib
  Reason: tried: '/opt/homebrew/opt/libavif/lib/libavif.15.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/opt/libavif/lib/libavif.15.dylib' (no such file), '/opt/homebrew/opt/libavif/lib/libavif.15.dylib' (no such file), '/usr/local/lib/libavif.15.dylib' (no such file), '/usr/lib/libavif.15.dylib' (no such file, not in dyld cache), '/opt/homebrew/Cellar/libavif/1.0.1/lib/libavif.15.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/Cellar/libavif/1.0.1/lib/libavif.15.dylib' (no such file), '/opt/homebrew/Cellar/libavif/1.0.1/lib/libavif.15.dylib' (no such file), '/usr/local/lib/libavif.15.dylib' (no such file), '/usr/lib/libavif.15.dylib' (no such file, not in dyld cache)
Abort trap: 6

搜了一下发现没有结果,只能尝试自己解决。

查看错误,发现直接原因是 php 的 gd 库依赖这个 libavif.15.dylib,但我估计安装 rustc 的时候,brew 默认给我升级了 libavif,因为现在 /opt/homebrew/opt/libavif/lib/ 目录下只有 16 版本的了:

TMBA:lib tony$ ll /opt/homebrew/opt/libavif/lib/
total 296
drwxr-xr-x   8 tony  admin   256B  9 28 02:11 .
drwxr-xr-x  11 tony  admin   352B  9 27 20:53 ..
drwxr-xr-x   3 tony  admin    96B  8 30 05:58 cmake
-rw-r--r--   1 tony  admin   146K  9 27 20:53 libavif.16.0.1.dylib
lrwxr-xr-x   1 tony  admin    20B  8 30 05:58 libavif.16.dylib -> libavif.16.0.1.dylib
lrwxr-xr-x   1 tony  admin    16B  8 30 05:58 libavif.dylib -> libavif.16.dylib
drwxr-xr-x   3 tony  admin    96B  9 27 20:53 pkgconfig

那尝试一下直接用个软链接链接过去:

$ cd /opt/homebrew/opt/libavif/lib/
$ ln -s ./libavif.16.dylib ./libavif.15.dylib

再次查看目录下文件,多了一条:

lrwxr-xr-x   1 tony  admin    18B  9 28 02:11 libavif.15.dylib -> ./libavif.16.dylib

最后测试了一下 php 命令,问题解决。

至于 php 的 gd 库功能是否正常,等用到了再补充吧。

标签: macos, php, rust, gd, libavif