修复在 macOS Monterey 上使用 RVM 安装 Ruby 时出现 openssl@3 错误

bel*_*ros 10 openssl rvm

尝试了多种解决方案:

\n\n

实际上,在 Apple M1 芯片 macOS Monterey 上无法安装另一个 Ruby 版本(3.1.0 安装没有问题)。

\n

以下是已安装版本的详细信息:

\n
\xe2\x9e\x9c  ~ which openssl\n/opt/homebrew/opt/openssl@3/bin/openssl\n\xe2\x9e\x9c  ~ openssl version -a\nOpenSSL 3.0.1 14 Dec 2021 (Library: OpenSSL 3.0.1 14 Dec 2021)\nbuilt on: Tue Dec 14 16:16:25 2021 UTC\nplatform: darwin64-arm64-cc\noptions:  bn(64,64)\ncompiler: clang -fPIC -arch arm64 -O3 -Wall -DL_ENDIAN -DOPENSSL_PIC -D_REENTRANT -DOPENSSL_BUILDING_OPENSSL -DNDEBUG\nOPENSSLDIR: "/opt/homebrew/etc/openssl@3"\nENGINESDIR: "/opt/homebrew/Cellar/openssl@3/3.0.1/lib/engines-3"\nMODULESDIR: "/opt/homebrew/Cellar/openssl@3/3.0.1/lib/ossl-modules"\nSeeding source: os-specific\nCPUINFO: OPENSSL_armcap=0x7f\n
Run Code Online (Sandbox Code Playgroud)\n

.zshrc以下是设置后添加到文件中的行openssl

\n
export PATH="/opt/homebrew/opt/openssl@3/bin:$PATH"\nexport LDFLAGS="-L/opt/homebrew/opt/openssl@3/lib"\nexport CPPFLAGS="-I/opt/homebrew/opt/openssl@3/include"\nexport PKG_CONFIG_PATH="/opt/homebrew/opt/openssl@3/lib/pkgconfig"\n\n# Add RVM to PATH for scripting. Make sure this is the last PATH variable change.\nexport PATH="$PATH:$HOME/.rvm/bin"\n
Run Code Online (Sandbox Code Playgroud)\n

使用的RVM版本:

\n
\xe2\x9e\x9c  ~ rvm -v\nrvm 1.29.12 (latest) by Michal Papis, Piotr Kuczynski, Wayne E. Seguin [https://rvm.io]\n
Run Code Online (Sandbox Code Playgroud)\n

安装Ruby版本时(无论3.0.0或更低版本,例如2.6.5),会引发错误:

\n
\xe2\x9e\x9c  ~ rvm install 2.6.5 --with-openssl-dir=`brew --prefix openssl`\nruby-2.6.5 - #removing src/ruby-2.6.5 - please wait\nChecking requirements for osx.\nCertificates bundle \'/opt/homebrew/etc/openssl@1.1/cert.pem\' is already up to date.\nRequirements installation successful.\nInstalling Ruby from source to: /Users/serguei/.rvm/rubies/ruby-2.6.5, this may take a while depending on your cpu(s)...\nruby-2.6.5 - #downloading ruby-2.6.5, this may take a while depending on your connection...\nruby-2.6.5 - #extracting ruby-2.6.5 to /Users/serguei/.rvm/src/ruby-2.6.5 - please wait\nruby-2.6.5 - #configuring - please wait\nruby-2.6.5 - #post-configuration - please wait\nruby-2.6.5 - #compiling - please wait\nError running \'__rvm_make -j8\',\nplease read /Users/serguei/.rvm/log/1647291878_ruby-2.6.5/make.log\n\nThere has been an error while running make. Halting the installation.\n
Run Code Online (Sandbox Code Playgroud)\n

这是创建的日志文件的内容:

\n
+__rvm_make:0> make -j8\n    BASERUBY = /Users/serguei/.rvm/rubies/ruby-3.1.0/bin/ruby --disable=gems\n    CC = gcc\n    LD = ld\n    LDSHARED = gcc -dynamiclib\n    CFLAGS = -O3 -ggdb3 -Wall -Wextra -Wdeclaration-after-statement -Wdeprecated-declarations -Wdivision-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wextra-tokens   -fno-common -pipe \n    XCFLAGS = -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-strict-overflow -fvisibility=hidden -DRUBY_EXPORT -DCANONICALIZATION_FOR_MATHN\n    CPPFLAGS = -I/opt/homebrew/opt/openssl@3/include -I/opt/homebrew/opt/libyaml/include -I/opt/homebrew/opt/libksba/include -I/opt/homebrew/opt/readline/include -I/opt/homebrew/opt/zlib/include -I/opt/homebrew/opt/openssl@1.1/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT   -I. -I.ext/include/-darwin21 -I./include -I. -I./enc/unicode/12.1.0 \n    DLDFLAGS = -L/opt/homebrew/opt/openssl@3/lib -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -L/opt/homebrew/opt/libyaml/lib -L/opt/homebrew/opt/libksba/lib -L/opt/homebrew/opt/readline/lib -L/opt/homebrew/opt/zlib/lib -L/opt/homebrew/opt/openssl@1.1/lib -install_name /Users/serguei/.rvm/rubies/ruby-2.6.5/lib/libruby.2.6.dylib -compatibility_version 2.6 -current_version 2.6.5  -fstack-protector-strong -framework Security -framework Foundation  -fstack-protector-strong -framework Security -framework Foundation  \n    SOLIBS = -lpthread -ldl -lobjc\n    LANG = \n    LC_ALL = \n    LC_CTYPE = UTF-8\nApple clang version 13.1.6 (clang-1316.0.21.2)\nTarget: arm64-apple-darwin21.4.0\nThread model: posix\nInstalledDir: /Library/Developer/CommandLineTools/usr/bin\n...\nast.c:132:19: warning: \'(\' and \'{\' tokens introducing statement expression appear in different macro expansion contexts [-Wcompound-token-split-by-macro]\n    rb_funcall(f, rb_intern("set_encoding"), 2, rb_enc_from_encoding(enc), rb_str_new_cstr("-"));\n...\n2 warnings generated.\nlinking shared-object cgi/escape.bundle\n6 warnings generated.\nlinking shared-object psych.bundle\n4 warnings generated.\nlinking shared-object zlib.bundle\n422 warnings generated.\nlinking shared-object date_core.bundle\nmake: *** [build-ext] Error 2\n+__rvm_make:0> return 2\n
Run Code Online (Sandbox Code Playgroud)\n

唯一成功安装的版本是3.1.0

\n
\xe2\x9e\x9c  ~ rvm list\n=* ruby-3.1.0 [ arm64 ]\n\n# => - current\n# =* - current && default\n#  * - default\n
Run Code Online (Sandbox Code Playgroud)\n

任何想法 ?

\n

更新

\n

有一个问题描述了可能的修复方法。\n我不再使用 rvm 并选择了ASDF

\n

A. *_*MAR 7

对于 ruby​​ 版本2.6.x2.7.x,也许3.0.0也可以。尝试使用openssl@1.1.

首先,尝试使用 homebrew 安装 openssl@1.1

brew install openssl@1.1
Run Code Online (Sandbox Code Playgroud)

然后尝试用这个 openssl 安装 ruby​​ 2.6.5

rvm install 2.6.5 --with-openssl-dir=`brew --prefix openssl@1.1`
Run Code Online (Sandbox Code Playgroud)

这可能有效。


小智 6

这对我有用:

PKG_CONFIG_PATH=/opt/homebrew/opt/openssl@1.1/lib/pkgconfig rvm install [ruby-version] --with-openssl-lib=/opt/homebrew/opt/openssl@1.1 --with-openssl-include=/opt/homebrew/opt/openssl@1.1
Run Code Online (Sandbox Code Playgroud)


Spi*_*rit 5

尝试

rvm install 2.6.5 --with-openssl-dir=`brew --prefix openssl`
Run Code Online (Sandbox Code Playgroud)


小智 0

你有没有尝试过rvm install 2.6.5 --with-openssl-dir=/opt/openssl?上次它对我有用