我试图运行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安装