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

Posted

技术标签:

【中文标题】Ruby Gem 安装 Json 在 Mavericks 和 Xcode 5.1 上失败 - 未知参数:\'-multiply_definedsuppress\'【英文标题】:Ruby Gem install Json fails on Mavericks and Xcode 5.1 - unknown argument: '-multiply_definedsuppress'Ruby Gem 安装 Json 在 Mavericks 和 Xcode 5.1 上失败 - 未知参数:'-multiply_definedsuppress' 【发布时间】:2014-04-16 15:58:02 【问题描述】:

我正在尝试运行 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

我正在使用:

操作系统 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] 红宝石:2.2.2 GCC:4.2.1 Apple LLVM 版本 5.1 (clang-503.0.38)(基于 LLVM 3.4svn)

【问题讨论】:

我做了很多尝试来解决这个问题,但我不知道究竟是哪个解决了,但我安装了新的 ruby​​ 版本,下载了以前版本的命令行工具(10 月下旬)并执行了命令@Muncken 的回答(ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future original command)。这解决了我的问题。在我的具体情况下,我使用 boxen 来安装我的环境,所以我使用的最终命令是 ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future /opt/boxen/repo/script/ boxen --no-fde。感谢所有帮助过的人。 Mavericks 10.9.3 将 ruby​​ 更新为:ruby 2.0.0p451(2014-02-24 修订版 45167)[universal.x86_64-darwin13] 这似乎解决了问题。 问题出在@Sash 所说的旧版红宝石上。我不得不从 2.0.0p2 手动更新到 2.0.0p451.. 使用 rvm:rvm install ruby​​-2.0.0-p451。 rvm 应该将其设置为默认版本,然后你只需要重新安装你的 gems 我在使用 rvm ruby​​ 2.2.0p0(2014-12-25 修订版 49005)时遇到了这个问题 【参考方案1】:

在将 Xcode 更新到 5.1 后,我遇到了完全相同的问题,而且来自 Apple 的消息并不好。来自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 以使用有效选项。明确表示:以后不支持[downgrading error to warning]这个选项

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


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

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

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

【讨论】:

非常感谢,你帮了我很多。自从更新到 Xcode CLI 工具 5.1 版本后,我在尝试捆绑 Rails 4 项目时遇到了一大堆错误。虽然我需要通过 ARCHFLAGS 两次:安装特定损坏的 gem 和运行 Bundler 时。 很高兴我能帮助拉斐尔。我一天中的大部分时间都在同样的混乱中度过。 我做了很多尝试来解决这个问题,但我不知道究竟是哪个解决了,但我安装了新的 ruby​​ 版本,下载了以前版本的命令行工具(10 月下旬)并执行了命令关于这个答案。这解决了我的问题。在我的情况下,我使用盒子来安装我的环境,所以我使用的最后一个命令是 ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future /opt/boxen/repo/script/boxen --no-fde。感谢所有帮助过的人 我无法让这个解决方案为我工作。 clang: error: unknown argument: '-multiply_definedsuppress' [-Wunused-command-line-argument-hard-error-in-future] 仍然失败有什么想法吗? 您可以尝试显式导出export ARCHFLAGS="...",然后在新行中运行您的编译命令,例如gem install json(我自己正在编译Python 模块)。顺便说一句,不要忘记将以前存在的 archflags 添加到该行,否则它们将被覆盖。【参考方案2】:

单线解决该问题

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

【讨论】:

没用。运行命令并失败:patching file /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/universal-darwin15/rbconfig.rb Hunk #1 FAILED at 82. Hunk #2 FAILED at 125. 2 out of 2 hunks FAILED -- saving rejects to file /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/universal-darwin15/rbconfig.rb.rej【参考方案3】:

要解决此问题,您可以安装最新版本的 ruby​​,如 @Sash 所述。您可以使用以下命令来执行此操作。如果您已经安装了 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

【讨论】:

【参考方案4】:

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] 这似乎解决了这个问题。

【讨论】:

【参考方案5】:

@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

【讨论】:

你能描述一下吗? 就像@Muncken 说的,但他只是提供了答案gem install,我试过bundle install 也有效 你的答案应该是完整的,即使没有其他答案的上下文。 是的。更好更完整。 此 ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future 可用于因 clang 失败的每个命令:错误:未知参数:'-multiply_definedsuppress '。实际上这告诉clang编译器这个错误应该被视为警告【参考方案6】:

在我的情况下,我实际上有类似的问题,但不是在系统 ruby​​ 上,而是在 rvm 从 OSX 10.8 安装的 rubies 上,升级到 OSX 10.9 后出现问题。

简单的重新安装即可:rvm reinstall ruby-2.1.1

【讨论】:

在尝试了所有方法来解决这个问题之后,这就是为我做的!谢谢!【参考方案7】:

在 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,因此上述建议可能适合您,也可能不适合您。

【讨论】:

【参考方案8】:

Paul Chechetin 的单线似乎不再起作用(2015 年 9 月 21 日)。但是,this reply 到皮特回复中提到的帖子为我解决了这个问题:

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

【讨论】:

我更新了 Xcode 但从未启动它。当我启动它时,它提示我接受一些东西,然后它必须“安装组件”。之后,我再次尝试了我的gem install json,它成功了!【参考方案9】:

这些都不适合我。

最终奏效的是使用 sudo 运行命令 -

gem install byebug -v '9.0.6'

【讨论】:

【参考方案10】:

已经有一段时间了,我遇到了类似的错误。使用bundler 的人的替代方法是将标志添加到构建配置中,如下例所示:

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

紧随其后

bundle install

请注意,您必须将上面的 &lt;gemname&gt; 替换为在构建原生扩展时引发错误的实际 gem 的名称。

我希望这对将来面临类似问题的其他人有所帮助!

【讨论】:

【参考方案11】:

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

brew 安装名称

【讨论】:

以上是关于Ruby Gem 安装 Json 在 Mavericks 和 Xcode 5.1 上失败 - 未知参数:'-multiply_definedsuppress'的主要内容,如果未能解决你的问题,请参考以下文章

安装 json gem 时出错:“json”本机 gem 需要安装构建工具

Could not find ‘json‘ (>= 1.5.1) among 45 total gem(s)

Could not find ‘json‘ (>= 1.5.1) among 45 total gem(s)

在 Windows 上安装 json gem 时出错

Ruby JSON

Ruby JSON