在ffi上捆绑更新失败

我正在尝试在我的rails应用程序上进行bundle update ,但是我收到以下错误:

 Installing ffi (1.0.11) with native extensions Unfortunately, a fatal error has occurred. Please report this error to the Bundler issue tracker at https://github.com/carlhuda/bundler/issues so that we can fix it. Thanks! /Users/Kyle/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:552:in `rescue in block in build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError) /Users/Kyle/.rvm/rubies/ruby-1.9.3-p125/bin/ruby extconf.rb checking for ffi.h... *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/Users/Kyle/.rvm/rubies/ruby-1.9.3-p125/bin/ruby --with-ffi_c-dir --without-ffi_c-dir --with-ffi_c-include --without-ffi_c-include=${ffi_c-dir}/include --with-ffi_c-lib --without-ffi_c-lib=${ffi_c-dir}/lib --with-libffi-config --without-libffi-config --with-pkg-config --without-pkg-config /Users/Kyle/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:381:in `try_do': The compiler failed to generate an executable file. (RuntimeError) You have to install development tools first. from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:506:in `try_cpp' from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:931:in `block in have_header' from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:790:in `block in checking_for' from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:284:in `block (2 levels) in postpone' from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:254:in `open' from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:284:in `block in postpone' from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:254:in `open' from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:280:in `postpone' from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:789:in `checking_for' from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:930:in `have_header' from extconf.rb:9:in `' Gem files will remain installed in /Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/ffi-1.0.11 for inspection. Results logged to /Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/ffi-1.0.11/ext/ffi_c/gem_make.out from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:530:in `block in build_extensions' from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:505:in `each' from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:505:in `build_extensions' from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:180:in `install' from /Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/bundler-1.1.0/lib/bundler/source.rb:90:in `block in install' from /Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/bundler-1.1.0/lib/bundler/rubygems_integration.rb:82:in `preserve_paths' from /Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/bundler-1.1.0/lib/bundler/source.rb:89:in `install' from /Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/bundler-1.1.0/lib/bundler/installer.rb:73:in `block in install_gem_from_spec' from /Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/bundler-1.1.0/lib/bundler/rubygems_integration.rb:97:in `with_build_args' from /Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/bundler-1.1.0/lib/bundler/installer.rb:72:in `install_gem_from_spec' from /Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/bundler-1.1.0/lib/bundler/installer.rb:56:in `block in run' from /Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/bundler-1.1.0/lib/bundler/installer.rb:55:in `run' from /Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/bundler-1.1.0/lib/bundler/installer.rb:12:in `install' from /Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/bundler-1.1.0/lib/bundler/cli.rb:271:in `update' from /Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/bundler-1.1.0/lib/bundler/vendor/thor/task.rb:22:in `run' from /Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/bundler-1.1.0/lib/bundler/vendor/thor/invocation.rb:118:in `invoke_task' from /Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/bundler-1.1.0/lib/bundler/vendor/thor.rb:263:in `dispatch' from /Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/bundler-1.1.0/lib/bundler/vendor/thor/base.rb:386:in `start' from /Users/Kyle/.rvm/gems/ruby-1.9.3-p125/gems/bundler-1.1.0/bin/bundle:13:in `' from /Users/Kyle/.rvm/gems/ruby-1.9.3-p125/bin/bundle:19:in `load' from /Users/Kyle/.rvm/gems/ruby-1.9.3-p125/bin/bundle:19:in `' 

有任何想法吗?

昨天我遇到了类似的问题。

我能够使用以下步骤解决它:

https://github.com/carlhuda/bundler/blob/1-0-stable/ISSUES.md

从本质上讲,我的捆绑包存在问题并清除了问题并从头开始重建事情解决了问题。

这里重复这些步骤:

 # remove user-specific gems and git repos rm -rf ~/.bundle/ ~/.gem/ # remove system-wide git repos and git checkouts rm -rf $GEM_HOME/bundler/ $GEM_HOME/cache/bundler/ # remove project-specific settings and git repos rm -rf .bundle/ # remove project-specific cached .gem files rm -rf vendor/cache/ # remove the saved resolve of the Gemfile rm -rf Gemfile.lock # try to install one more time bundle install 

虽然,在输出文本中给出了消息:

您必须首先安装开发工具。

这让我觉得你可能没有安装Apple Xcode开发者工具 。 你检查过了吗? (我相信它们可以在Mac App Store中找到。)

对于Xcode 5及更高版本:

 $ xcode-select --install 

安装命令行工具。

从brew安装gcc-4.2后,您需要创建它的符号链接:

 ln -s /usr/bin/gcc /usr/bin/gcc-4.2 

以防万一尝试运行

sudo / usr / bin / gcc

你可能会看到许可协议,所以滚动它,输入“同意”并尝试再次安装gem。

请注意:

如果您最近更新了Xcode,则可能只需要打开Xcode并接受最新协议

我有同样的问题,最近安装了Xcode(v6.1)的更新,并通过以下步骤解决了它:

  1. 打开Xcode
  2. 接受新协议
  3. 重新运行捆绑包更新

通过Xcode安装“命令行工具”就可以了。

如果您有Xcode 4.5,请打开首选项 > 下载 >选择组件选项卡,然后单击命令行工具旁边的安装

虽然我是从Xcode安装的,但您也可以从Apple的Developer Downloads下载没有它的软件包并搜索“命令行工具” 。

对我来说,我只是没有安装gcc,在Ubuntu解决:

 sudo apt install build-essential 

我不得不接受Xcode用户许可证:

运行sudo xcrun cc应该会显示Xcode许可协议的cli版本。 另一个选择是打开Xcode.app并在GUI中同意。

可能是由更新OSX引起的。

http://blog.tomhennigan.co.uk/post/62238548037/agreeing-to-the-xcode-license-from-the-command

Mac OSx 10.10.2优胜美地

  CC=/usr/bin/i686-apple-darwin11-llvm-gcc-4.2 gem install ffi 

这就是它 – 检查你可以挂钩的/usr/bin中有4.2编译器

 ls /usr/bin|grep gcc|grep 4.2 

您不必擦除所有本地gem或覆盖符号链接来执行此操作 – 这是浪费时间并且可能会产生更多问题然后解决。

请注意,如果您需要通过brew安装,您的bin路径可能会有所不同

 brew install apple-gcc42 

还方法:

 export SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk bundle update 

ffi.h可以在${SDKROOT}/usr/include/ffi/ffi.h

Ubuntu Trusty LTS 14.04

需要从ruby 2.2.1切换到2.3.0以支持Rails应用程序中的新gem版本。

解:

  1. rvm get stable
  2. rvm remove 2.3.0
  3. rvm install 2.3.0
  4. bundle install