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 Build version 5B130a
命令行工具:5.1.0.0.1.1393561416
Ruby: Ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
Ruby Gem: 2.2.2
Apple LLVM version 5.1 (clang-503.0.38)(基于LLVM 3.4svn)

我在将Xcode升级到5.1后遇到了完全相同的问题,来自苹果的消息并不好。From Xcode 5.1 Release Notes:

    Xcode 5.1中的Apple LLVM编译器将无法识别的命令行选项视为错误。这个问题在构建Python本地扩展和Ruby Gems时都存在,其中当前指定了一些无效的编译器选项。

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

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

要解决这个问题,设置ARCHFLAGS环境变量,将错误降级为警告。

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

似乎所有违反编译器选项的gem都必须更新以使用有效的选项。这个选项[降级错误到警告]在未来将不被支持

我们看到的clang注释(这将是一个硬错误(不能降级为警告)在未来)对应于发布说明中宣布的更改。


要回答您的问题,请使用以下命令安装json gem:

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

请注意,这只是一个临时修复。

用一行代码修复

curl https://gist.githubusercontent.com/pbrit/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

现在我们只需要等待Apple将他们的ruby版本(2.0.0p247)更新到最新版本(2.0.0p451)之后,这个版本还没有出来…(或brew/macport)

更新(2014-05-15):Mavericks 10.9.3更新ruby到 ruby 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

我用这个配置更新了rvm,所有的错误都消失了!:

rvm get stable --auto-dotfiles

你可以从应用程序的名字看出我刚刚开始摆弄Ruby on Rails,所以上面的建议可能对你有用,也可能不适用。

Paul Chechetin的一行代码似乎不再工作了(9/21/15)。然而,对Pete的回复中提到的帖子的这个回复为我解决了这个问题:

  • (a)安装Apple的XCode,然后(b)发行它并接受许可条款(我做过(a),但没有(b))
  • sudo gem uninstall compass
  • sudo gem install compass

这些方法都不适合我。

最后工作的是使用sudo -

命令运行命令

已经有一段时间了,我也有类似的错误。使用bundler的另一种选择是将标志添加到构建配置中,如下面的示例:

bundle config build.<gemname> --with-cflags="-Wno-error=implicit-function-declaration"

紧随其后
bundle install

请注意,您必须将上面的<gemname>替换为在构建本机扩展时抛出错误的实际gem的名称。

我希望这对将来遇到类似问题的人有所帮助!

我使用了一个简单的解决方案…通过brew安装

最新更新