【问题标题】:Ruby 1.8.6 `gem install` segfaults with "abort trap 6"Ruby 1.8.6 `gem install` 段错误与“中止陷阱 6”
【发布时间】:2013-04-05 16:03:26
【问题描述】:

我无法在 Mountain Lion 上全新安装 rbenv 的 Ruby 1.8.6 上安装任何 gem。 gem install segfaults 和 shell 打印“中止陷阱:6”:

$ RUBYLIB= RUBYOPT= bash

$ gem install --verbose bundler
  GET http://rubygems.org/latest_specs.4.8.gz
  302 Moved Temporarily
  GET http://production.s3.rubygems.org/latest_specs.4.8.gz
  304 Not Modified
  Installing gem bundler-1.3.5
  Abort trap: 6

similar issues reported,但他们的答案都是他们需要使用非Apple GCC 4.2 来构建这样一个旧版本的Ruby。这不适用于我,因为我已经使用brew install apple-gcc42 安装了 GCC,并且 rbenv 安装过程选择了它,如下所示:

$ gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 1.3.7
  - RUBY VERSION: 1.8.6 (2010-09-02 patchlevel 420) [i686-darwin12.3.0]
  - INSTALLATION DIRECTORY: /Users/mislav/.rbenv/versions/1.8.6-p420/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: /Users/mislav/.rbenv/versions/1.8.6-p420/bin/ruby
  - EXECUTABLE DIRECTORY: /Users/mislav/.rbenv/versions/1.8.6-p420/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-darwin-12
  - GEM PATHS:
     - /Users/mislav/.rbenv/versions/1.8.6-p420/lib/ruby/gems/1.8
     - /Users/mislav/.gem/ruby/1.8
  - GEM CONFIGURATION:
     - "gem" => "--no-ri --no-rdoc"
  - REMOTE SOURCES:
     - http://rubygems.org/

$ ruby -rrbconfig -e 'puts RbConfig::CONFIG["configure_args"]'
  '--prefix=/Users/mislav/.rbenv/versions/1.8.6-p420'
  'CC=/usr/local/bin/gcc-4.2'
  'CFLAGS=  -Wno-error=shorten-64-to-32'
  'LDFLAGS=-L'\\''/Users/mislav/.rbenv/versions/1.8.6-p420/lib'\\'' '
  'CPPFLAGS=-I'\\''/Users/mislav/.rbenv/versions/1.8.6-p420/include'\\'' '

$ /usr/local/bin/gcc-4.2 --version
  i686-apple-darwin11-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3)

【问题讨论】:

  • @jahrichie 不,rbenv,从第一段和gem env的输出可以看出

标签: ruby gcc rubygems segmentation-fault rbenv


【解决方案1】:

我一眼就能看出的唯一区别是我将gcc-4.2 安装到/usr/bin 中,而您使用的是/usr/local/bin。这不应该有所作为,但我想有可能一些 Makefile 硬编码 /usr/bin(这更常见 - 我猜?)gcc

既然您提到您使用 Homebrew 安装 gcc-4.2,我还要补充一点,我使用手动方法,按照以下说明操作:http://caiustheory.com/install-gcc-421-apple-build-56663-with-xcode-42。同样,我不认为 应该 有所作为,但你永远不知道。

【讨论】:

  • 是的,从源代码编译就可以了。这意味着 Homebrew 分发的 apple-gcc 在我的 OS X 版本中已损坏,我将报告它。
  • 嗨,我相信我的情况与@mislav 相同,我理解这个答案,但是我不确定如何解决这个问题。我在/usr/bin/gcc 中有一个 gcc,还有一个使用自制软件安装的 gcc。我是否需要卸载自制版本,然后使用 caiustheory.com 链接重新安装?如果是这样,这会在我的 Mac OS Sierra 上搞砸什么吗?我理解这个问题只是不确定是否是解决它的最佳方法。谢谢
  • @FireDragon 很抱歉,但我不知道该推荐什么。我不再使用 Ruby,而且我担心四年后可能会发生很多变化。我什至不知道 Caius 方法是否适用于当前的 Mac。最好开一个新问题:指定你想要什么版本的 Ruby,你正在使用什么工具等等。即使你参考这个问题,现在情况可能已经不同了。
【解决方案2】:

rubygems 的较新版本可能无法在 Ruby 1.8.6 及更早版本上运行。

您可以随时尝试slimgems 作为替代方案。这是 1.3.x 系列rubygems 系统的一个分支,它针对错误而不是功能进行了修补。

【讨论】:

  • 我没有运行较新版本的 Rubygems。除非它正在编译本机扩展,否则 Rubygems 中没有应该出现段错误的代码。这闻起来像是一个损坏的 Ruby 构建。
【解决方案3】:

可能是 OS X 的版本。Apple 在新的 OS X 和 Xcode 中更改了他们的编译器。 gcc 安装在哪里?尝试运行哪个 gcc。

【讨论】:

  • 我知道 Apple 已将 gcc 切换为使用他们的 LLVM 编译器,而较旧的 Ruby 无法使用它。这就是为什么我强调我正在使用来自 Homebrew 的apple-gcc42,这是他们以前版本的 gcc,它不是基于 LLVM 的。
猜你喜欢
  • 2014-12-13
  • 2017-05-11
  • 2015-10-04
  • 1970-01-01
  • 1970-01-01
  • 2019-03-25
  • 2016-10-31
相关资源
最近更新 更多