gem install 失败并显示“ruby:无效选项 -H(-h 将显示有效选项)(RuntimeError)”

Posted

技术标签:

【中文标题】gem install 失败并显示“ruby:无效选项 -H(-h 将显示有效选项)(RuntimeError)”【英文标题】:gem install fails with "ruby: invalid option -H (-h will show valid options) (RuntimeError)" 【发布时间】:2013-05-31 01:31:04 【问题描述】:

在 OSX Mountain lion 上运行 gem install ffi 会产生以下错误。

gem install ffi
Building native extensions.  This could take a while...
ERROR:  Error installing ffi:
    ERROR: Failed to build gem native extension.

    /beweiche.rvm/rubies/ruby-1.9.3-p374/bin/ruby extconf.rb
/beweiche.rvm/rubies/ruby-1.9.3-p374/bin/ruby: invalid option -H  (-h will show valid options) (RuntimeError)


Gem files will remain installed in /beweiche.rvm/gems/ruby-1.9.3-p374@hugo/gems/ffi-1.8.1 for inspection.

任何原生扩展都会发生这种情况。 使用系统 ruby​​ (1.8.7) 我可以安装带有本机扩展的 gem。它甚至适用于 1.9.3。但是在“安装了 gem 更新”之后,我被卡住了。

在我的机器上安装了 gem:

bundler (1.2.3)
coderay (1.0.9)
diff-lcs (1.2.4)
graph (2.5.2)
method_source (0.8.1)
pry (0.9.12.1)
rake (10.0.3)
rspec (2.13.0)
rspec-core (2.13.1)
rspec-expectations (2.13.0)
rspec-mocks (2.13.1)
rubygems-bundler (1.1.0)
rvm (1.11.3.6)
slop (3.4.4)

这似乎是一个愚蠢的错字,但我找不到。

非常感谢任何提示。

同时,我已经在我的 rvm 中安装了 ruby​​ 2.0.0-rc1。使用此设置,我可以安装带有本机扩展的 gem。我在 1.9.3 中将 gem 升级到与 2.0.0 中相同的版本,但问题仍然存在。

【问题讨论】:

/beweiche.rvm 正确吗? 是的,这是正确的。它软链接到 /Volumes/Macintosh HD/Users/beweiche/.rvm/ 以避免路径中的空格。 【参考方案1】:

你使用homebrew吗?如果是这样,请在运行 bundle 之前尝试通过 brew install libffi 安装 ffi。

你为什么运行gem update installed?您应该让 Bundler 为您处理更新:bundlebundle update gem_xyz。如果您想添加新的 gem,只需将其添加到 Gemfile。

我假设当您更新所有 gem 时,其中一个已更新为依赖于 FFI。您可以通过在Gemfile.lock 中搜索ffi 来验证这一点。一旦您看到哪个 gem 依赖于它,您就可以决定是否将该 gem 修复到您的 Gemfile 中的早期版本,并完全摆脱依赖关系,或者继续安装 lib。

【讨论】:

我从来没有设法让自制软件在我的机器上运行。我会再试一次,如果它不起作用,我会在这里打开另一个问题。但是感谢捆绑器的提示。

以上是关于gem install 失败并显示“ruby:无效选项 -H(-h 将显示有效选项)(RuntimeError)”的主要内容,如果未能解决你的问题,请参考以下文章

mac 上的 gem install rails 失败错误:无法构建 gem 本机扩展

gem install mysql2 失败

gem install / update失败,“没有将nil隐式转换为String”

gem install mongrel 使用 ruby​​ 1.9.1 失败

gem install pg --with-pg-config 有效,捆绑失败

ruby gem install显示错误(Gem::RemoteFetcher::FetchError)