无法在 mac 上安装 RubyGems:因为不支持 Objective-C 垃圾回收

Posted

技术标签:

【中文标题】无法在 mac 上安装 RubyGems:因为不支持 Objective-C 垃圾回收【英文标题】:Can't install RubyGems on mac: because Objective-C garbage collection is not supported 【发布时间】:2021-12-10 20:12:25 【问题描述】:

我在 MacOS 上使用 RVM 安装 Ruby,显然它还安装了 RubyGems:

macruby-0.12 - #installing rubygems-3.0.9.

在那一行之后我得到了这个错误:

Error running 'env GEM_HOME=/Users/alex/.rvm/gems/macruby-0.12@global GEM_PATH= /Users/alex/.rvm/rubies/macruby-0.12/bin/ruby -d /Users/alex/.rvm/src/rubygems-3.0.9/setup.rb --no-document',
please read /Users/alex/.rvm/log/1635157083_macruby-0.12/rubygems.install.log

文件/Users/alex/.rvm/log/1635157083_macruby-0.12/rubygems.install.log有如下日志:

[2021-10-25 13:18:15] /Users/alex/.rvm/rubies/macruby-0.12/bin/ruby
current path: /Users/alex/.rvm/src/rubygems-3.0.9
PATH=/usr/local/Cellar/ruby/2.4.1_1/bin:/usr/local/mysql/bin:/opt/local/bin:/opt/local/sbin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/usr/local/share/dotnet:~/.dotnet/tools:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/Users/alex/.rvm/bin
command(7): env GEM_HOME=/Users/alex/.rvm/gems/macruby-0.12@global GEM_PATH= /Users/alex/.rvm/rubies/macruby-0.12/bin/ruby -d /Users/alex/.rvm/src/rubygems-3.0.9/setup.rb --no-document
dyld: dyld cache load error: existing shared cache in memory is not compatible
dyld: Library not loaded: /Library/Frameworks/MacRuby.framework/Versions/0.12/usr/lib/libmacruby.dylib
  Referenced from: /Users/alex/.rvm/rubies/macruby-0.12/usr/bin/macruby
  Reason: no suitable image found.  Did find:
    /Users/alex/.rvm/rubies/macruby-0.12/usr/lib/libmacruby.dylib: cannot load '/Users/alex/.rvm/rubies/macruby-0.12/usr/lib/libmacruby.dylib' because Objective-C garbage collection is not supported
    /Users/alex/.rvm/rubies/macruby-0.12/usr/lib/libmacruby.dylib: stat() failed with errno=1

我该如何解决?

【问题讨论】:

MacRuby 0.12 来自 2012,RubyGems 3.0.9 来自 2020,它们不能一起工作也就不足为奇了。 @JörgWMittag 那么我应该为 Mac 安装哪个 Ruby 版本?还是平台没有区别? 你在你的mac上试过ruby --version吗? @AleksandrNovik macruby 是 Ruby 语言的“不同”(显然未维护)实现,它不同于通常称为 MRI 或只是 ruby​​ 的“默认”Ruby 实现。你可以在 Mac 上使用“普通”的 Ruby。使用 rvm,您可以使用 rvm install 3.0.2 安装最新的 ruby​​ 版本。 【参考方案1】:

MacRuby 是基于 macOS 原语的 Ruby 语言的完全不同(并且显然未维护)的重新实现。鉴于 MacRuby 从未完成并且最后一次更新是在 2012 年,MacRuby 似乎不再与现代 macOS 版本兼容。

话虽如此,MacRuby 不同于通常称为 MRI 或只是 ruby​​ 的“默认”Ruby 实现。在您的 Mac(以及 Linux、其他 *nix 系统或 Windows)上,您可以使用标准的 Ruby。

要使用 RVM 安装最新版本的 Ruby,您可以运行

rvm install 3.0
rvm use 3.0

在编写此答案时,这将在您的 Mac 上安装并激活 Ruby 3.0.2。

【讨论】:

以上是关于无法在 mac 上安装 RubyGems:因为不支持 Objective-C 垃圾回收的主要内容,如果未能解决你的问题,请参考以下文章

在MAC上快速安装Rails

无法在 Mac 上安装 Ruby gem libxslt-ruby,因为它找不到 libxml2

安装RVM时现有宝石会发生什么?

Mac中gem安装与移除

无法在 Mac 上安装 ejabberd

安装 ruby​​gems 时出现 SSL 错误,无法从“https://rubygems.org/”中提取数据