ruby-install failed :error: use of undeclared identifier 'RSA_SSLV23_PADDING'
$ ruby-install 2.7.4
(省略)
ossl_pkey_rsa.c:942:5: error: use of undeclared identifier 'RSA_SSLV23_PADDING'
DefRSAConst(SSLV23_PADDING);
^
ossl_pkey_rsa.c:877:58: note: expanded from macro 'DefRSAConst'
#define DefRSAConst(x) rb_define_const(cRSA, #x, INT2NUM(RSA_##x))
^
<scratch space>:160:1: note: expanded from here
RSA_SSLV23_PADDING
^
115 warnings and 1 error generated.
make[2]: *** [ossl_pkey_rsa.o] Error 1
make[1]: *** [ext/openssl/all] Error 2
make: *** [build-ext] Error 2
!!! Compiling ruby 2.7.4 failed!
主な原因は、OpenSSLのバージョンとRubyのバージョンの互換性の問題です。
Ruby 2.7系はOpenSSL 1.1.1系列と互換性があり、適切なバージョンを指定する必要があります。最新のOpenSSLバージョンと組み合わせると互換性の問題が発生する可能性があります。
現在使用しているOpenSSLのバージョンを調べる方法は以下の通りです。
openssl version
$ openssl version
OpenSSL 3.3.0 9 Apr 2024 (Library: OpenSSL 3.3.0 9 Apr 2024)
現在有効なOpenSSLのバージョンは3.3.0
だとわかりました。
どうやらOpenSSLのバージョンとRubyのバージョンのミスマッチが原因で間違いなさそうです。
すでにインストールされているバージョンを確認します。
$ brew list | grep openssl
openssl@1.1
openssl@3
私の環境にはすでにopenssl@1.1
があるのでそれを指定する方向で進めることに。
もし必要なバージョンがない場合はbrewでインストールしましょう。
brew install openssl@1.1
色々調べてうまく行ったのは以下の設定でした。
export OPENSSL_ROOT_DIR=$(brew --prefix openssl@1.1)
export PATH="$OPENSSL_ROOT_DIR/bin:$PATH"
export LDFLAGS="-L$OPENSSL_ROOT_DIR/lib"
export CPPFLAGS="-I$OPENSSL_ROOT_DIR/include"
export PKG_CONFIG_PATH="$OPENSSL_ROOT_DIR/lib/pkgconfig"
ruby-install ruby 2.7.4
おわり