しょうもないところで詰まりました。
現象
macOS Big Sur環境でrbenv install 3.0.2
やrbenv install 3.0.1
を実行すると以下のエラーが発生しました。rbenv install 2.7.4
やrbenv install 2.6.8
ではなぜか発生しませんでした。
$ rbenv install 3.0.2
Downloading ruby-3.0.2.tar.gz...
-> https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.2.tar.gz
Installing ruby-3.0.2...
ruby-build: using readline from homebrew
BUILD FAILED (macOS 11.4 using ruby-build 20210707-4-gebdcf0c)
Inspect or clean up the working tree at /var/folders/3x/sfj972cx6vnddfqpk5yv36m00000gn/T/ruby-build.20210708152635.35557.WWeFzy
Results logged to /var/folders/3x/sfj972cx6vnddfqpk5yv36m00000gn/T/ruby-build.20210708152635.35557.log
Last 10 log lines:
compiling rb_str_dup.c
installing default date_core libraries
installing digest libraries
compiling set_len.c
linking shared-object digest.bundle
linking shared-object etc.bundle
linking shared-object dbm.bundle
linking shared-object -test-/string.bundle
linking shared-object date_core.bundle
make: *** [build-ext] Error 2
メッセージに表示されたログファイルを開くと以下のようにbigdecimal.cのビルドがコケていました。
# 略
In file included from bigdecimal.c:13:
./bigdecimal.h:122:1: error: redefinition of 'rb_array_const_ptr'
rb_array_const_ptr(VALUE a)
^
../.././include/ruby/internal/core/rarray.h:184:1: note: previous definition is here
rb_array_const_ptr(VALUE a)
^
In file included from bigdecimal.c:13:
./bigdecimal.h:139:1: error: static declaration of 'rb_sym2str' follows non-static declaration
rb_sym2str(VALUE sym)
^
../.././include/ruby/internal/symbol.h:63:7: note: previous declaration is here
VALUE rb_sym2str(VALUE);
^
bigdecimal.c:108:1: error: static declaration of 'rb_rational_num' follows non-static declaration
rb_rational_num(VALUE rat)
^
../.././include/ruby/internal/intern/rational.h:39:7: note: previous declaration is here
VALUE rb_rational_num(VALUE rat);
^
bigdecimal.c:120:1: error: static declaration of 'rb_rational_den' follows non-static declaration
rb_rational_den(VALUE rat)
^
../.././include/ruby/internal/intern/rational.h:40:7: note: previous declaration is here
VALUE rb_rational_den(VALUE rat);
^
bigdecimal.c:132:1: error: static declaration of 'rb_complex_real' follows non-static declaration
rb_complex_real(VALUE cmp)
^
../.././include/ruby/internal/intern/complex.h:38:7: note: previous declaration is here
VALUE rb_complex_real(VALUE z);
^
bigdecimal.c:144:1: error: static declaration of 'rb_complex_imag' follows non-static declaration
linking shared-object -test-/tracepoint.bundle
rb_complex_imag(VALUE cmp)
^
../.././include/ruby/internal/intern/complex.h:39:7: note: previous declaration is here
VALUE rb_complex_imag(VALUE z);
^
# 略
1. Command Line Toolsが最新であることを確認する
よくある原因は、MacのCommand Line Toolsが古くなっているというものだそうです。Command Line Toolsのインストール/アンインストール方法はちょくちょく変わっていましたが、現在は以下のようにコマンドラインでできるようになっています。
# issue #1505 #issuecomment-752274233より
$ sudo rm -rf /Library/Developer/CommandLineTools
$ xcode-select --install
$ sudo xcode-select -s /Library/Developer/CommandLineTools
しかし自分の場合は、これを行っても引き続きエラーになりました。
2. binutilsとcoreutilsをチェックする
さらに調べてみると、少し前に何かの都合で自分がHomebrewでインストールしたbinutilsとcoreutilsが怪しそうです。
.profileで以下をコメントアウトしてからbashに再ログインしました。
# ~/.profile
export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
export MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"
export LDFLAGS="-L/usr/local/opt/binutils/lib"
export CPPFLAGS="-I/usr/local/opt/binutils/include"
export PATH="/usr/local/opt/binutils/bin:$PATH"
今度はrbenv install 3.0.2
で3.0.2のインストールに成功しました!
$ rbenv install 3.0.2
Downloading ruby-3.0.2.tar.gz...
-> https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.2.tar.gz
Installing ruby-3.0.2...
ruby-build: using readline from homebrew
Installed ruby-3.0.2 to /Users/hachi8833/.anyenv/envs/rbenv/versions/3.0.2
後で切り分けてみると、原因はbinutilsの方でした。
さしあたってどちらも使っていないので、brew uninstall binutils coreutils; brew cleanup
を実行してbinutilsとcoreutilsを削除しました。