Ruby Gem安装Json在Mavericks和Xcode 5.1上失败 – 未知参数:'-multiply_definedsuppress'

我试图运行gem install json,并得到以下错误

Gem::Ext::BuildError: ERROR: Failed to build gem native extension. /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb creating Makefile make "DESTDIR=" clean make "DESTDIR=" compiling generator.c linking shared-object json/ext/generator.bundle clang: error: unknown argument: '-multiply_definedsuppress' [-Wunused-command-line-argument-hard-error-in-future] clang: note: this will be a hard error (cannot be downgraded to a warning) in the future make: *** [generator.bundle] Error 1 make failed, exit code 2 Gem files will remain installed in /opt/boxen/repo/.bundle/ruby/2.0.0/gems/json-1.8.0 for inspection. Results logged to /opt/boxen/repo/.bundle/ruby/2.0.0/extensions/universal-darwin-13/2.0.0/json-1.8.0/gem_make.out 

我在用着:

Os X:10.9.2
Xcode:5.1生成版本5B130a
命令行工具(CLT):5.1.0.0.1.1393561416
Ruby:ruby 2.0.0p247(2013-06-27修订号41674)[universal.x86_64-darwin13]
rubygem:2.2.2
GCC:4.2.1苹果LLVM版本5.1(clang-503.0.38)(基于LLVM 3.4svn)

在将Xcode更新到5.1之后,我遇到了完全相同的问题,苹果的新闻也不好。 来自Xcode 5.1发行说明 :

  • Xcode 5.1中的Apple LLVM编译器将无法识别的命令行选项视为错误。 当构buildPython本地扩展和Ruby Gems(当前指定了一些无效的编译器选项)时,已经看到了这个问题。

使用无效编译器选项的项目将需要更改以删除这些选项。 为了帮助缓解这种转换,编译器会暂时接受一个选项来将错误降级为警告:

-Wno-error=unused-command-line-argument-hard-error-in-future

要解决此问题,请将ARCHFLAGS环境variables设置为将错误降级为警告。

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future gem install GemName

看来所有违反编译器选项的gem必须更新为使用有效的选项。 明确指出: 将来不会支持此选项[将错误降级为警告]

我们所看到的叮铛声( 未来将是一个严重错误(不能降级为警告) )对应于发行说明中公布的更改。


要专门回答您的问题,请使用以下内容安装json gem:

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future gem install json

但是,请注意,这只是一个临时的解决办法。

单线来解决这个问题

 curl https://gist.githubusercontent.com/Paulche/9713531/raw/1e57fbb440d36ca5607d1739cc6151f373b234b6/gistfile1.txt | sudo patch /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/universal-darwin13/rbconfig.rb 

为了解决这个问题,你可以安装@Sash描述的最新版本的ruby。 您可以使用以下命令来执行此操作。 如果你已经安装了rvm,你不需要重新安装它。

 #Install rvm \curl -sSL https://get.rvm.io | bash -s stable #Install ruby version 2.0.0-p451 rvm install ruby-2.0.0-p451 #Print ruby version to verify that it was installed successfully ruby -v #Install json gem sudo gem install json 

Ruby已经解决的问题:

https://bugs.ruby-lang.org/issues/9624

现在我们只需要等待苹果更新他们的ruby版本(2.0.0p247)到最新的一个(2.0.0p451),还没有出来…(或酿造/ macport它)

更新(2014-05-15):小牛10.9.3更新rubyruby 2.0.0p451 (2014-02-24 revision 45167) [universal.x86_64-darwin13]这似乎解决了这个问题。

@Muncken已经提供了一个一个安装gem的答案:

 ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future gem install GemName 

根据Muncken的回答,我已经尝试过使用bundle install时也可以使用

 ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future bundle install 

在我的情况下,我真的有类似的问题,但不是在系统上的ruby,而是由rvm从OSX 10.8安装的ruby,并升级到OSX 10.9后有问题。

一个简单的重新安装工程: rvm reinstall ruby-2.1.1

在OSX 10.10上,当运行rails new firstapp时有几个问题,例如:

 ERROR: Error installing json: ERROR: Failed to build gem native extension. fatal error: 'ruby/config.h' file not found 

我用这个configuration更新了rvm,所有的错误消失了!

 rvm get stable --auto-dotfiles 

你可以从应用程序名称中知道我刚开始摆弄Ruby on Rails,所以上面的build议可能会或可能不适合你。

(9/21/15)Paul Chechetin的单线不再起作用。 然而,对皮特的回复中提到的这个post的回复为我解决了这个问题:

  • (a)安装Apple的XCode,然后(b)启动它并接受许可条款(我已经完成了(a),但没有(b))
  • sudo gem uninstall compass
  • sudo gem install compass

这些都没有为我工作。

最后工作是用sudo运行命令 –

gem安装byebug -v'9.0.6'

我用一个简单的解决scheme…通过酿造安装

brew安装名称