Edited at

Ruby-FFI は --enabe-system-libffi 明示した方が良さそう


注記の追記

Windows だと本家の libffi は(一部)誤動作するようです。

Ruby-FFI が引用する libffi fork は Windows 向け fix が入っていて、本家にも PR してるけど、2019-08-13 現在まだ merge されていません。


要約


  • AWS A1 Instance で Ruby-FFI が seg fault したよ

  • Amazon Linux 2 の libffi-devel を使ったら seg fault しなかったよ

  • Ruby-FFI は内部に支流の libffi を持ってるよ

  • Ruby-FFI はシステムに libffi-devel 等が無い場合、内部の libffi をリンクするよ

  • Ruby-FFI では --enable-system-libffi を付けるとシステムの libffi の利用を強制できるよ


解法


with bundler

$ bundle config build.ffi --enable-system-libffi


ところで


支流の libffi とは

Ruby-FFI の .gitmodules に書いてあるリポジトリが http://sourceware.org/libffi/ に書いてあるリポジトリと違うので、支流と呼んでみました。

(前者は後者を fork したもののようです。)


--enable-system-libffi について

extconf.rb にて enable_config() で参照されています。

changelog によれば 2019-05-17 に追加されたようです。デキタテホヤホヤ。


なぜ初手で libffi-devel をインストールしなかったのか

数年前に Rails セットアップの最小手順を模索した際に、各 devel パッケージを yum install から除外してみて不都合ないか確認した結果、libffi-devel 要らねってなったのです。

当時は nokogiri に --use-system-libraries つけてなかったり、まぁ、トレンドは変わるのですね。