Mac osx 11.6 に Ruby 2.6.x および 3.0.x をインストールすると、ruby-install が失敗する
概要
Ruby-install を実行するとビルドに失敗します。これは rbenv の問題でも報告されています (https://github.com/rbenv/ruby-build/issues/1725)。
たとえば、Ruby 2.6.8 をインストールする場合
# installing via ruby-install ( https://github.com/postmodern/ruby-install )
ruby-install ruby 2.6.8
次のエラーが発生します
ossl_x509store.c:452:30: note: ')' token is here
result = rb_funcall(ctx, rb_intern("verify"), 0);
^~~~~~~~~~~~~~~~~~~
../.././include/ruby/ruby.h:1826:56: note: expanded from macro 'rb_intern'
__extension__ (RUBY_CONST_ID_CACHE((ID), (str))) : \
^
../.././include/ruby/ruby.h:2602:20: note: expanded from macro 'rb_funcall'
rb_funcallv(recv, mid, \
^~~
6 warnings generated.
linking shared-object openssl.bundle
installing default openssl libraries
make[2]: Leaving directory '/Users/xxxxx/src/ruby-2.6.8/ext/openssl'
make[2]: Entering directory '/Users/xxxxx/src/ruby-2.6.8/ext/ripper'
extracting ripper.y from ../.././parse.y
compiling compiler ripper.y
ripper.y:762.9-16: syntax error, unexpected identifier, expecting string
make[2]: *** [Makefile:332: ripper.c] Error 1
make[2]: Leaving directory '/Users/xxxxx/src/ruby-2.6.8/ext/ripper'
make[1]: *** [exts.mk:257: ext/ripper/all] Error 2
make[1]: Leaving directory '/Users/xxxxx/src/ruby-2.6.8'
make: *** [uncommon.mk:286: build-ext] Error 2
!!! Compiling ruby 2.6.8 failed!
解決策
コンパイラの問題のようです。まず、Xcode が適切にインストールされていることを確認します。私の場合はすでにインストールされていましたが、念のため再インストールすることもできます。コンパイルには数分かかるため、これが人々が問題を解決する時間を節約するのに役立つことを願っています。
# check xcode, should yield : /Library/Developer/CommandLineTools
xcode-select -p
# check xcode, should yield : xcode-select version 2384
xcode-select -v
# install xcode-select
xcode-select --install
# reinstall openssl and version 3
brew reinstall [email protected]
# install build dependancies
brew install openssl readline libyaml zlib bison [email protected]
# ensure build is using bison
export PATH="$(brew --prefix [email protected])/bin:$PATH"
# set ruby compilation flags
export CFLAGS="-Wno-error=implicit-function-declaration"
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix [email protected]) --with-readline-dir=$(brew --prefix readline) --with-libyaml-dir=$(brew --prefix libyaml) --with-zlib-dir=$(brew --prefix zlib)"
# install ruby via ruby-install
ruby-install ruby 2.6.8
失敗した場合はさらにいくつかの手順を実行します
# ensure that openssl is linked
brew unlink openssl && brew link openssl --force
# load openssl 1.1 for compilation
export LDFLAGS="-L/opt/homebrew/opt/[email protected]/lib"
export CPPFLAGS="-I/opt/homebrew/opt/[email protected]/include"
export PKG_CONFIG_PATH="/opt/homebrew/opt/[email protected]/lib/pkgconfig"
# install ruby via ruby-install
ruby-install ruby 2.7.7