rubygems で Library not loaded: /usr/local/opt/libffi/lib/libffi.7.dylib

macOS BigSurでRuby on Rails 6.1 on Ruby 3.0.2を使っていたところ、以下のエラーがでた。

% rails test
mkdir: /usr/local/bin/../version_cache: Permission denied
/usr/local/bin/rbenv-communal-gem-home: line 21: /usr/local/bin/../version_cache/3.0.2: No such file or directory
/Users/next49/.rbenv/gems/3.0.0/gems/bootsnap-1.9.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require': dlopen(/Users/next49/.rbenv/gems/3.0.0/gems/ffi-1.15.4/lib/ffi_c.bundle, 9): Library not loaded: /usr/local/opt/libffi/lib/libffi.7.dylib
  Referenced from: /Users/next49/.rbenv/gems/3.0.0/gems/ffi-1.15.4/lib/ffi_c.bundle
  Reason: image not found - /Users/next49/.rbenv/gems/3.0.0/gems/ffi-1.15.4/lib/ffi_c.bundle (LoadError)
〜以下略〜

エラーメッセージのとおり、/usr/local/opt/libffi/lib/libffi.7.dylib を読み込もうとしたところ、このファイルがないらしい。確認してみると確かにない。

% ls -1 /usr/local/opt/libffi/lib/
libffi.8.dylib
libffi.a
libffi.dylib
pkgconfig

brew update & brew upgradeしたときにバージョンアップしてしまったのだと思う。rbenvでインストールしているRubyやrubygemをインストールしなおせばよいのだけど、めんどくさいのでシンボリックリンクで対応する。

% cd /usr/local/opt/libffi/lib/

% sudo ln -s libffi.8.dylib libffi.7.dylib

% ls -1 /usr/local/opt/libffi/lib/
libffi.7.dylib
libffi.8.dylib
libffi.a
libffi.dylib
pkgconfig

これで無事に動いた。