【问题标题】:OS X Lion, Attempting Nokogiri install - libxml2 is missingOS X Lion,正在尝试安装 Nokogiri - libxml2 丢失
【发布时间】:2012-02-26 09:52:45
【问题描述】:
sudo gem install nokogiri
Building native extensions.  This could take a while...
ERROR:  Error installing nokogiri:
    ERROR: Failed to build gem native extension.

        /Users/sajeev86/.rvm/rubies/ruby-1.8.7-p352/bin/ruby extconf.rb
checking for libxml/parser.h... no
-----
libxml2 is missing.  please visit http://nokogiri.org/tutorials/installing_nokogiri.html for help with installing dependencies.
-----
*** 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.

我无法安装 Nokogiri。这对我来说已经有一段时间了。我也通过 MacPorts 和 Homebrew 安装了依赖项。

我感觉正确的目录没有相互指向?但不知道如何解决。

【问题讨论】:

    标签: ruby-on-rails osx-lion nokogiri


    【解决方案1】:

    对我来说,它有帮助:

    brew install libxml2 libxslt
    

    如果权限被拒绝sudo chown -R $USER /Library/Caches/Homebrew

    sudo env ARCHFLAGS="-arch x86_64"
    
    export NOKOGIRI_USE_SYSTEM_LIBRARIES=1
    
    NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri
    

    【讨论】:

      【解决方案2】:

      对我来说,我只是做了以下

      xcode-select --install
      gem install nokogiri
      

      如需更深入的故障排除,请查看Installing Nokogiri

      【讨论】:

        【解决方案3】:

        如果您要安装旧版本的 Nokogiri,即 1.6 之前的版本,这可能会有所帮助:

        Nokogiri installation guide 中,他们提到:

        因为 Nokogiri 需要编译和动态链接 libxml2 和 libxslt,它都以 安装复杂。

        从 Nokogiri 1.6 开始,libxml2 和 libxslt 源代码与 Nokogiri,并在 gem-install-time 编译。该文件应该可以工作 适用于所有 1.6.4 及更高版本。

        (如果您需要安装 Nokogiri 早期版本的支持,您 可能想看看这个文档的 git 历史。)

        确实很难安装,但是有办法。我浏览了自述文件的历史,并决定使用这个,并附上写得很好的提交信息:

        Homebrew, I straight hate you.

        从该消息和此处的其他答案中,我了解到在安装 Nokogiri 时我需要非常具体地了解 libxml2 的 lib、dir 和包含目录。以下对我有用,但请更新以匹配您的 libxml2 软件版本(我的是 2.9.2,我正在安装 Nokogiri 1.5.0):

        NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri -v '1.5.0' -- 
            --use-system-libraries 
            --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.2/lib 
            --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" 
            --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config" 
            --with-xml2-dir=/usr/local/Cellar/libxml2/2.9.2/ 
            --with-xml2-include=/usr/local/Cellar/libxml2/2.9.2/include/libxml2
        

        【讨论】:

          【解决方案4】:

          我必须使用这个命令才能工作:

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

          (来源:http://www.virtlab.cx/ruby-fix-error-install-nokogiri-yosemite/,非常感谢作者)

          【讨论】:

            【解决方案5】:

            在我使用的优胜美地:

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

            非常接近上述一些命令,但没有 libconv

            【讨论】:

              【解决方案6】:

              绝对没有这里的其他答案对我有用。

              在最新版本的 Mavericks 上,对我来说唯一成功的方法如下:

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

              【讨论】:

              • 至少到今天为止,该 brew 命令失败,因为“没有可用的 libiconv 公式”(加上仅使用 Apple 提供的副本的建议)。然后,建议的 gem 行失败,并显示相同的“未能构建 gem 原生扩展”。
              • 好的,汤米……没问题。尝试手动安装 libiconv,然后从 brew install 行中删除该单词。 wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz; tar xvfz libiconv-1.13.1.tar.gz; cd libiconv-1.13.1; ./configure --prefix=/usr/local/Cellar/libiconv/1.13.1; make; sudo make install;
              • 这也适用于 High Sierra /w noko 版本 1.8.2。
              【解决方案7】:
              brew install libxml2 libxslt 
              gem install nokogiri -v '1.6.5' -- --use-system-libraries
              

              【讨论】:

              • 如果您向 OP 解释这里发生了什么以及它为什么有效,那就太好了。你知道,“教人钓鱼”等等。
              【解决方案8】:

              在 Mavericks 中,使用 Homebrew 安装库并在安装 gem 之前设置 NOKOGIRI_USE_SYSTEM_LIBRARIES=1 对我有用。

              总结:

              • 如果之前已安装,请卸载 gem:
                $ gem uninstall nokogiri

              • 使用 Homebrew 安装 libxml2libxsltlibiconv:
                $ brew install libxml2 libxslt libiconv

              • 安装 gem,指定要链接的库的路径:
                $ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri -- --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config"

              【讨论】:

              • export NOKOGIRI_USE_SYSTEM_LIBRARIES=1 也帮助了我的bundle install,谢谢。
              • 我不必卸载 nokogiri,因为我使用的是端口,所以只需尝试NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri,这对我有用
              • 谢谢。完美运行。
              【解决方案9】:

              在山狮上遇到了类似的安装问题,除了 make 命令在 /usr/local/opt/apple-gcc42/bin 中寻找 gcc-4.2

              这为我解决了问题;无需 brew install libxml2 或 libxslt 或添加 --with 选项:

              mkdir -p /usr/local/opt/apple-gcc42/bin
              ln -s /usr/bin/gcc /usr/local/opt/apple-gcc42/bin/gcc-4.2
              

              【讨论】:

                【解决方案10】:

                我遇到了 Mavrick 的同样问题,解决方案是

                xcode-select --install
                

                但是这不起作用,因为苹果下载页面没有公开可用的安装程序。 因此,如果您想拥有 Mavricks 的命令行工具,您需要有一个付费帐户,那么只有您才能安装它。 一旦你安装它,你将不会遇到这个 Nokogiri 问题。

                【讨论】:

                  【解决方案11】:

                  这在 OSX 上对我有用 - 与 @remeberer 的答案相同,但具有完整路径。

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

                  【讨论】:

                    【解决方案12】:

                    对于遇到上述问题的我有些过时的系统,具体来说:

                    FENG-SHUI:demo Eric$ brew install libxml2
                    ==> Downloading ftp://xmlsoft.org/libxml2/libxml2-2.9.0.tar.gz
                    ######################################################################## 100.0%
                    ==> Downloading patches
                    ######################################################################## 100.0%
                    ######################################################################## 100.0%
                    ==> Patching patching file threads.c patching file xpath.c
                    ==> ./configure --prefix=/usr/local/Cellar/libxml2/2.9.0 --without-python
                    ==> make
                    ==> make install
                    ==> Caveats This formula is keg-only: so it was not symlinked into /usr/local.
                    
                    Mac OS X already provides this software and installing another version in parallel can cause all kinds of trouble.
                    
                    Generally there are no consequences of this for you. If you build your own software and it requires this formula, you'll need to add to your build variables:
                    
                        LDFLAGS:  -L/usr/local/opt/libxml2/lib
                        CPPFLAGS: -I/usr/local/opt/libxml2/include
                    
                    Error: Failed to create: /usr/local/opt/libxml2 
                    Things that depend on libxml2 will probably not build.
                        ==> Summary /usr/local/Cellar/libxml2/2.9.0: 273 files, 11M, built in 2.0 minutes 
                    
                    FENG-SHUI:demo Eric$ brew install libxml2 libxslt 
                    Error: libxml2-2.9.0 already installed 
                    Error: /usr/local/opt/libxml2 not present or broken Please reinstall libxml2. Sorry :(
                    

                    这是让 libxml2 和 libxslt 快乐运行的神奇公式:

                    # latest version 2.9.0
                    brew install libxml2
                    
                    # installing libxslt from source code
                    # get latest libxslt from ftp://xmlsoft.org/libxml2/libxslt-git-snapshot.tar.gz..
                    # then
                    ./configure --prefix=/usr/local/Cellar/libxslt/1.1.28 --with-libxml-prefix=/usr/local/Cellar/libxml2/2.9.0
                    make
                    sudo make install
                    
                    # installing nokogiri with this new compiled libs
                    gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.9.0/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.0/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.28
                    

                    感谢这个人:https://gist.github.com/fabioyamate/443160

                    希望这对某人有所帮助!

                    【讨论】:

                    • 这适用于在 OSX 10.8.4 上安装 nokogiri 1.6.0libxslt 1.1.28libxml2 2.9.1 - 谢谢!
                    • threads.c:918:20: error: expected expression once_control = PTHREAD_ONCE_INIT; ^ /usr/include/pthread.h:203:27: note: expanded from macro 'PTHREAD_ONCE_INIT' #define PTHREAD_ONCE_INIT {_PTHREAD_ONCE_SIG_init, {0}}
                    【解决方案13】:

                    我在 Lion 上也遇到了同样的问题。花了几个小时阅读帖子、尝试自制软件、macports 等。当我找到这个 post 并阅读 .rvm/gems/ruby-1.8.7-p358/gems/nokogiri-1.4.4/ext/nokogiri/ 的内容时mkmf.log,我看到了:

                    find_header: checking for libxml/parser.h... -------------------- no
                    
                    "/usr/bin/gcc-4.2 -E -I. -I/Users/me/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/1.8/i686-darwin10.8.0 -I. -I-I-I/opt/local/include -I-I-I/usr/local/include -I-I-I/Users/me/.rvm/rubies/ruby-1.8.7-p358/include -I-I-I/usr/include -I-I-I/usr/include/libxml2 -I/opt/local/include/libxml2 -I/usr/local/include/libxml2 -I/Users/me/.rvm/rubies/ruby-1.8.7-p358/include/libxml2 -I-I/opt/local/include -I-I/usr/local/include -I-I/Users/me/.rvm/rubies/ruby-1.8.7-p358/include -I-I/usr/include -I-I/usr/include/libxml2 -I/opt/local/include -I/usr/local/include -I/Users/me/.rvm/rubies/ruby-1.8.7-p358/include -I/usr/include -I/usr/include/libxml2  -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE   -g -O2  -fno-common -pipe -fno-common    -g -DXP_UNIX -O3 -Wall -Wcast-qual -Wwrite-strings -Wconversion -Wmissing-noreturn -Winline  conftest.c -o conftest.i"
                    checked program was:
                    /* begin */
                    1: #include <libxml/parser.h>
                    /* end */
                    

                    但是,gcc-4.2 并不存在:

                    $ ls /usr/bin/gcc*
                    /usr/bin/gcc
                    

                    因此,我能够通过将 gcc-4.2 设置为 gcc 的符号链接来解决问题并安装 nokogiri。

                    sudo ln -s gcc gcc-4.2
                    

                    【讨论】:

                      【解决方案14】:

                      我为此苦苦挣扎了好几个小时,直到找到这篇博文:http://www.markhneedham.com/blog/2010/07/08/installing-ruby-1-9-2-with-rvm-on-snow-leopard

                      运行命令

                      文件 /usr/local/lib/libxml2.2.dylib

                      在终端返回

                      /usr/local/lib/libxml2.2.dylib:Mach-O 动态链接共享库 i386

                      这意味着我的 libxml2.2 是为 32 位系统编译的,所以我必须为 64 位操作系统 (Lion) 重新编译 libxml2

                      首先我从ftp://xmlsoft.org/libxml2 下载 LATEST_LIBXML2 并运行以下命令:

                      tar xzvf LATEST_LIBXML2

                      cd libxml2-2.8.0

                      ./configure --with-python=/System/Library/Frameworks/Python.framework/Versions/2.3/

                      制作

                      然后我从同一个站点下载了 LATEST_LIBXSLT 并运行了这些命令:

                      tar xzvf LATEST_LIBXSLT

                      cd libxslt-1.1.26

                      ./配置

                      制作

                      sudo 安装

                      跑步

                      文件 /usr/local/lib/libxml2.2.dylib

                      又回来了

                      /usr/local/lib/libxml2.2.dylib:Mach-O 64位动态链接共享库x86_64

                      我终于可以安装 nokogiri 了!

                      【讨论】:

                        【解决方案15】:

                        聚会迟到了,但如果有人在使用 MacPorts 时仍然遇到这个问题:

                        将 /include 目录添加到 .profile 文件中的 PATH 中,这样 nokogiri 就知道在哪里可以找到它。

                        例如

                        MacPorts 写入您的 .profile 文件并默认添加以下行:

                        export PATH=/opt/local/bin:/opt/local/sbin:$PATH
                        

                        首先,像这样添加 /include 路径:

                        export PATH=/opt/local/bin:/opt/local/sbin:/opt/local/include/:$PATH
                        

                        然后,从同一个终端窗口运行:

                        source ~/.profile
                        

                        (这会告诉您的终端重新检查 .profile 文件是否有任何更改)

                        最后,尝试从同一个终端窗口安装 gem。

                        sudo gem install nokogiri
                        

                        【讨论】:

                          【解决方案16】:

                          检查错误消息中给出的 url (http://nokogiri.org/tutorials/installing_nokogiri.html) 我认为问题是您使用的是哪个版本的 Homebrew?

                          brew -v
                          

                          我会更新到 0.8+

                          brew update
                          brew upgrade
                          

                          然后再次尝试安装:

                          brew install libxml2 libxslt
                          brew link libxml2 libxslt
                          gem install nokogiri
                          

                          【讨论】:

                          • 我没遇到过这个问题,你能不能先试试“brew unlink libxml2”再“brew link libxml2”
                          • Linking /usr/local/Cellar/libxml2/2.7.8... 21 symlinks created Linking /usr/local/Cellar/libxslt/1.1.26... 22 symlinks created 但它仍然返回 libxml2 is missing 消息。
                          【解决方案17】:

                          尝试将--with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib 添加到您的命令中,假设这是 MacPorts libxml2 的位置。

                          【讨论】:

                            猜你喜欢
                            • 2011-09-10
                            • 1970-01-01
                            • 1970-01-01
                            • 2014-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2015-12-28
                            • 2012-04-02
                            • 1970-01-01
                            相关资源
                            最近更新 更多