【问题标题】:Nokogiri 'Failed to build gem native extension' when I run bundle install当我运行捆绑安装时,Nokogiri '无法构建 gem 本机扩展'
【发布时间】:2014-05-15 03:20:26
【问题描述】:

我正在运行 bundle install 并收到此错误:

Building nokogiri using system libraries.

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb --use-system-libraries
Building nokogiri using system libraries.
libxml2 version 2.6.21 or later is required!
*** 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
    --without-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=/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby
    --help
    --clean
    --use-system-libraries
    --with-zlib-dir
    --without-zlib-dir
    --with-zlib-include
    --without-zlib-include=${zlib-dir}/include
    --with-zlib-lib
    --without-zlib-lib=${zlib-dir}/lib
    --with-xml2-dir
    --without-xml2-dir
    --with-xml2-include
    --without-xml2-include=${xml2-dir}/include
    --with-xml2-lib
    --without-xml2-lib=${xml2-dir}/lib
    --with-libxml-2.0-config
    --without-libxml-2.0-config
    --with-pkg-config
    --without-pkg-config
    --with-xslt-dir
    --without-xslt-dir
    --with-xslt-include
    --without-xslt-include=${xslt-dir}/include
    --with-xslt-lib
    --without-xslt-lib=${xslt-dir}/lib
    --with-libxslt-config
    --without-libxslt-config
    --with-pkg-config
    --without-pkg-config
    --with-exslt-dir
    --without-exslt-dir
    --with-exslt-include
    --without-exslt-include=${exslt-dir}/include
    --with-exslt-lib
    --without-exslt-lib=${exslt-dir}/lib
    --with-libexslt-config
    --without-libexslt-config
    --with-pkg-config
    --without-pkg-config

extconf failed, exit code 1

Gem files will remain installed in /Users/myuser/projectpath/vendor/bundle/ruby/2.0.0/gems/nokogiri-1.6.2.rc2 for inspection.
Results logged to /Users/myuser/projectpath/vendor/bundle/ruby/2.0.0/extensions/universal-darwin-13/2.0.0/nokogiri-1.6.2.rc2/gem_make.out
An error occurred while installing nokogiri (1.6.2.rc2), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.6.2.rc2'` succeeds before bundling.

有什么想法吗?

编辑:

我也在instructions in the tutorial之后安装了nokogiri,奇怪的是gem安装成功了。当我运行gem list 时,我有nokogiri (1.6.2.1),但是在运行bundle install 时它会显示错误。

【问题讨论】:

    标签: ruby-on-rails rubygems bundle nokogiri


    【解决方案1】:

    以前的建议对我没有帮助,这是 OS 10.9 的解决方案:

    brew install libxml2
    bundle config build.nokogiri "--use-system-libraries --with-xml2-include=/usr/local/opt/libxml2/include/libxml2"
    bundle install
    

    【讨论】:

    • 谢谢 - 这在 Mac OS X 10.9.5 上也适用于我,而其他一切都没有。
    • 太棒了!精彩的!惊人的!杰出的!数小时的痛苦结束了!天知道是谁在nokogiri.org/tutorials/installing_nokogiri.html 上写了要求我卸载 gcc 并弄乱 Xcode 的指令。
    • 非常感谢。有人可以解释为什么会这样以及将来如何预防吗?
    • 这对我有帮助,但在 Ubuntu 上我必须使用 dpkg 找出安装路径: dpkg -L libxml2-dev 在 libxml2 上使用 dpkg 不起作用,只有 libxml2-dev (在确保已安装)。谢谢!
    • 运行bundle install后出现此错误:Could not locate Gemfile or .bundle/ directory
    【解决方案2】:

    在 Mavericks 这个解决方法对我有用:

    gem install nokogiri -- --use-system-libraries=true --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2
    

    见:https://github.com/sparklemotion/nokogiri/issues/1099#issuecomment-43023208

    【讨论】:

    • 谢谢你!我一直在谷歌上搜索这个问题,你的解决方案终于成功安装,我能够完成让 Jekyll 在 OSX 10.9.5 上运行(成功)的说明
    • 也适用于优胜美地,如果有帮助的话。
    • 这似乎也有效:gem install nokogiri -- --with-xml2-include=/usr/local/opt/libxml2/include/libxml2
    • 不得不将 10.9 更改为 10.10(因为 Yosemite)。否则,它会游泳。谢谢!
    • 10.11 El Capitan 更新:gem install nokogiri -- --use-system-libraries=true --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/libxml2
    【解决方案3】:

    在 Amazon Linux 上,我必须安装这两个开发库,然后指定 libxml2 的包含路径

    $ yum install libxml2-devel libxslt-devel
    $ gem install nokogiri -- --use-system-libraries=true --with-xml2-include=/usr/include/libxml2/
    

    【讨论】:

    • 谢谢。节省了我一些时间。 Amazon Linux(通常)比其他的更棘手。 :)
    • 太棒了!我整天都在尝试在 Amazons Ubuntu 安装上让它工作,你的解决方案终于构建了 Nokogiri。耶!
    • 还有sudo apt-get install binutils-doc cpp-doc gcc-4.8-locales gcc-multilib make autoconf automake1.9 libtool flex bison gdb gcc-doc gcc-4.8-multilib gcc-4.8-doc libgcc1-dbg libgomp1-dbg libitm1-dbg libatomic1-dbg libasan0-dbg libtsan0-dbg libbacktrace1-dbg libquadmath0-dbg binutils-gold glibc-doc libgmp10-doc libmpfr-dev libstdc++-4.8-doc
    • 在这项工作之前我必须先做yum install -y gcc ruby-devel zlib-devel
    • 谢谢!就像一个干净的 CentOS docker 映像的魅力;)
    【解决方案4】:

    我在安装 nokogiri 时也遇到了一些问题,比我安装了以下软件包,它对我有用:

    libxslt-dev
    libxml2-dev
    libruby1.8
    libreadline-ruby1.8
    libopenssl-ruby
    libxml2
    

    我不确定,到底需要哪一个。

    【讨论】:

    • 对于 redhat 基本系统,使用 libxslt-devellibxml2-devel
    【解决方案5】:

    http://nokogiri.org/tutorials/installing_nokogiri.html。请参阅此链接并安装 nokogiri 所需的依赖项。然后运行这个

    • bundle config build.nokogiri --use-system-libraries
    • bundle install

    【讨论】:

      【解决方案6】:

      在 Yosemite 10.10.1 上,此步骤没有帮助(可能对其他人有用)

      gem install nokogiri -- --use-system-libraries
      

      我本地的问题基本上是由于libxml2,所以下面的解决方法就成功了

      bundle config build.nokogiri "--use-system-libraries --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/libxml2
      
      bundle install
      

      【讨论】:

        【解决方案7】:

        这适用于 OS X El Capitan:

        brew install libxml2 libxslt libiconv 
        

        运行'brew install libxml2 libxslt libiconv'后你可能会发现,它们已经安装好了。不用担心,仔细检查永远不会有坏处。

        sudo gem install nokogiri -v '1.6.7' -- --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib
        
        bundle install
        

        如果需要,更改 nokogiri 的版本。例如

        sudo gem install nokogiri -v '1.6.5' -- --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib
        

        【讨论】:

          【解决方案8】:

          对于mac,失败的原因是你没有最新的Xcode Developer Tools。 Nokogiri 已经与 libxml2 一起打包。由于缺乏最新的 Xcode 开发者工具,它无法构建原生扩展。

          使用以下方式更新 Xcode 开发者工具:

          xcode-select --install
          

          然后:

          gem install nokogiri
          

          如果你通过使用来修复它

          gem install nokogiri -- --use-system-libraries
          

          以后可能会收到类似的警告:

          WARNING: Nokogiri was built against LibXML version 2.9.3, but has dynamically loaded 2.9.0
          

          【讨论】:

            【解决方案9】:

            错误表明您的 libxml2 系统库已过期。您需要 2.6.21 或更高版本。

            在我的 Debian/ubuntu 系统上,nokogiri 为我编译,我可以看到我的版本是 2.9.1

            dpkg -l | grep libxml2-dev
            ii  libxml2-dev:amd64                      2.9.1+dfsg1-3                      amd64        Development files for the GNOME XML library
            

            这里有三个选项。

            1. 检查您的操作系统包管理器是否提供更新版本的 libxml2 图书馆

            2. 下载最新的libxml2源码,编译安装 它

            3. 在您的 Gemfile 中手动指定旧版本的 nokogiri 适用于较旧的 libxml2 库。 nokogiri 更改日志显示,使用 nokogiri 1.4.7 版不会有这个问题(尽管使用的是较旧的 版本可能会使您面临安全问题)

            对于解决方案 #3,您可以将其放入 gemfile 中: gem 'nokogiri', '1.4.7'

            【讨论】:

            • 我其实有最新版本的 libxml2 (2.9.1),这很奇怪!
            • @FabKremer 你也安装了“-dev”包吗?假设你有 Debian/Ubuntu,试试sudo apt-get install libxml2-dev
            • @FabKremer,在我看来,您使用的是 Mac。在这种情况下,请阅读此处了解如何安装最新软件包:nokogiri.org/tutorials/installing_nokogiri.html
            • 是的,我使用的是 mac。请看我的编辑!我已经安装了 nokogiri,系统中有 gem,但是在我的项目上执行 bundle install 时错误仍然存​​在
            • 叫我笨蛋,但 nokogiri 说你需要 2.6.21 之后的版本,而你有 2.9.1,那它为什么抱怨呢?我有 2.7.8 并看到同样的问题。 Nokogiri 应该没问题,因为 IMO 2.7.8 大于 2.6.21,除非我基础数学不及格。
            【解决方案10】:

            在 Yosemite 10.10 上,以下步骤完全解决了我的问题:

            • sudo xcode-select -switch /Library/Developer/CommandLineTools
            • gem uninstall nokogiri libxml-ruby
            • gem install nokogiri

            【讨论】:

              【解决方案11】:

              thread on GitHub 给了我安装 Nokogiri 1.6.2 所需的技巧:

              我的 ~/.gitconfig 有设置 autocrlf = input。当我删除此设置时,nokogiri 构建成功。

              【讨论】:

                【解决方案12】:

                在 Yosemite 10.10 上,这个解决方法对我有用:

                gem install nokogiri -- --use-system-libraries
                

                【讨论】:

                  【解决方案13】:

                  对于#CentOS,我需要执行以下操作:

                  gem update --system
                  yum install libxml2-devel libxslt-devel ruby-devel
                  gem install nokogiri -- --use-system-libraries
                  

                  【讨论】:

                    【解决方案14】:

                    这是一个旧线程,但我遇到了类似的问题,我的解决方案与迄今为止发布的完全不同。

                    经过一番挖掘,我发现了这个线程: https://github.com/bundler/bundler/issues/2648#issuecomment-25124800

                    它谈到了使用与 gem 不同版本的 ruby​​ 的 bundler。

                    从 OP 的粘贴中,我们可以看到 bundler 正在使用 ruby​​ 的 Mac 系统副本: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby

                    就我而言,我发现 gem 来自 brew; which gem 给出了/usr/local/bin/gem 的符号链接到/Cellar/ruby/2.3.3/bin/gem。我的猜测是 OP 的情况是一样的。

                    所以,gem 和 bundler 不能在同一个 ruby​​ 安装下工作,这就解释了为什么 OP 会看到这个:

                    当我运行 gem list 时,我有 nokogiri (1.6.2.1),但是在运行 bundle install 时它会显示错误。

                    就我而言,我只是简单地运行了gem install bundler,这使得 bundler 开始使用 ruby​​ 的 brew 版本,所有问题都消失了。

                    【讨论】:

                      【解决方案15】:

                      在 OSX 10.12 (Sierra) 上,这对我有用:

                      gem install nokogiri -- --use-system-libraries=true --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/libxml2

                      【讨论】:

                        【解决方案16】:

                        我有这个确切的问题。我在 mac 上运行 rails 环境。在我从 Yosemite 升级到 Sierra 之后,我相信这就是它开始的时候。

                        为了解决这个问题,我只需要安装xcode command line tools。我不知道 Sierra 升级是否删除了它们或什么。

                        xcode-select --install

                        (这将安装xcode command line tools

                        还有另一个症状.. git status 之类的东西不起作用。在此之后,我能够做 rails new appname 并且很好。

                        【讨论】:

                          【解决方案17】:

                          这可以通过安装 libxml2 来解决:

                          brew install libxml2
                          bundle config build.nokogiri --use-system-libraries
                          bundle install
                          

                          【讨论】:

                            【解决方案18】:

                            这是 macOS 的问题,我尝试了上述所有方法,但没有任何效果,因此尝试安装 libxml2 的版本,但一切都是徒劳的。

                            所以使用下面的命令你会处于良好状态,

                            sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
                            

                            【讨论】:

                              猜你喜欢
                              • 1970-01-01
                              • 2012-07-24
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 2018-04-26
                              • 1970-01-01
                              • 1970-01-01
                              • 2016-11-23
                              相关资源
                              最近更新 更多