【问题标题】:Bundle update fails on ffiffi 上的捆绑更新失败
【发布时间】:2012-05-13 22:14:28
【问题描述】:

我正在尝试在我的 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 `<main>'


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 `<top (required)>'
    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 `<main>'

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 bundler ffi


    【解决方案1】:

    对我来说,我只是没有安装 gcc,在 Ubuntu 中通过以下方式解决:

    sudo apt install build-essential
    

    【讨论】:

    • 如果你在 Alpine 使用 apk 添加 alpine-sdk
    【解决方案2】:

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

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

    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 Developer Tools。你检查过吗? (我相信它们可以在 Mac App Store 中找到。)

    【讨论】:

    • 我确实安装了 Xcode,但似乎由于某种原因捆绑器找不到它...我尝试了您的建议以及安装 github.com/kennethreitz/osx-gcc-installer,现在一切正常。谢谢您的帮助!我打算给你赏金,但我要等 23 小时。那我给你:)
    • 对我来说,问题是我安装了 Xcode,但我还没有同意许可协议。首先从命令行执行 gcc(以 root 身份)并接受许可协议解决了这个问题。之后,原生 ffi 扩展编译没有问题。
    • ffi 在这里有点令人困惑,因为它会显示 GCC 抛出错误的许多迹象。 @Kevin 的解决方案实际上起到了作用,因为我的 ffi 问题实际上是由 Bundler 引起的。 PS对我来说第一个命令实际上是: rm -rf ~/.bundler/ ~/.gem
    • gcc -v -> "同意 Xcode/iOS 许可证需要管理员权限,请通过 sudo 以 root 身份重新运行。" -> 更新后需要启动 XCode。
    • 如果你有一些Xcode相关的问题,你必须在捆绑之前做,以摆脱错误
    【解决方案3】:

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

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

    【讨论】:

    • 这就是我最终为我安装 eventmachine gem 所做的。我曾尝试更新 rvm,重新安装 ruby​​,确保命令行工具在 XCode (4.6) 和其他一些东西中。我尝试设置 CC=/usr/local/bin/gcc-4.2 而没有设置,但它似乎最终使用 llvm-gcc 编译,因为现在 "/usr/bin/gcc-4.2@ -> /usr/bin/ gcc”和“/usr/bin/gcc@ -> llvm-gcc-4.2”。我完全不知道为什么,但它奏效了。希望它不会像 brew 安装那样搞砸其他任何事情......
    • 对我来说,我只是更新了我的 XCode 和命令行工具,然后你建议符号链接到 /usr/bin/gcc-4.2。谢谢!我暂时不会想到这一点。
    • 尝试安装 XCode 命令行工具并运行 gem install ffi 没有成功。按照@kiero ffi-1.9.3 的建议添加符号链接后安装正常。谢谢!
    • 请在下面查看我的答案 - 当您可以使用 gem install 轻松设置 CC(c 编译器)时,覆盖现有的符号链接是不好的
    【解决方案4】:

    对于 Xcode 5 及更高版本:

    $ xcode-select --install
    

    安装命令行工具。

    【讨论】:

      【解决方案5】:

      以防万一尝试运行

      sudo /usr/bin/gcc

      您可能会看到许可协议,因此滚动浏览它,输入“agree”并尝试再次安装 gem。

      【讨论】:

      • 你知道这个问题有多老了吗?它有一个公认的答案
      • 这实际上为我解决了问题,所以感谢您迟到的答案。
      • 这对我有用。谢啦!上面的所有解决方案都没有解决它,但确实如此。干得好!
      • 这正是我需要看到的。 (呃,愚蠢的苹果)
      【解决方案6】:

      请注意:

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

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

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

      【讨论】:

        【解决方案7】:

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

        如果你有 Xcode 4.5 打开 Preferences > Downloads > 选择 Components 选项卡并点击 Install 旁边的 命令行工具。

        虽然我是从 Xcode 安装的,但你也可以从 Apple's Developer Downloads and searching for "Command Line Tools" 下载没有它的包。

        【讨论】:

          【解决方案8】:

          我必须接受 Xcode 用户许可证:

          运行 sudo xcrun cc 应该会调出 Xcode 的 cli 版本 许可协议。另一种选择是打开 Xcode.app 并同意 图形用户界面。

          可能由更新 OSX 引起。

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

          【讨论】:

            【解决方案9】:

            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 
            

            【讨论】:

              【解决方案10】:

              还有方法:

              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

              【讨论】:

                【解决方案11】:

                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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2016-05-09
                  • 1970-01-01
                  • 2013-12-21
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-07-22
                  • 2015-10-19
                  相关资源
                  最近更新 更多