Mac user and getting WARNING: Nokogiri was built against LibXML version 2.7.8, but has dynamically loaded 2.7.3

前端 未结 16 1429
暖寄归人
暖寄归人 2020-11-27 11:24

I have done all kinds of research and tried many different things. I know this question has been answered many times, but none of the suggested solutions are working for me.

相关标签:
16条回答
  • 2020-11-27 11:58

    Just ran into this myself (OS X Lion 10.7.5). My exact message was: Nokogiri was built against LibXML version 2.8.0, but has dynamically loaded 2.7.3

    I tried a few suggestions mentioned here, none worked, but this did:

    gem install nokogiri -- --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/local
    

    The explanation is: "This happens because the Lion system default libxml2 (loaded at bootstrap) is used, regardless of which libxml2 Nokogiri was built against."

    Credits to: https://coderwall.com/p/o5ewia

    0 讨论(0)
  • 2020-11-27 12:02

    As per the comment from patrickmcgraw above, simply putting nokogiri as the first entry in my Gemfile worked for me. I'm putting it as a separate answer because the original comment has been buried.

    source 'http://rubygems.org'
    gem 'nokogiri'
    gem 'rails', '3.0.20'
    etc...
    
    0 讨论(0)
  • 2020-11-27 12:05

    To fix this if you're using homebrew and bundler, add gem 'nokogiri' to the top of your Gemfile, then run these commands:

    gem uninstall nokogiri libxml-ruby
    brew update
    brew uninstall libxml2
    brew install libxml2 --with-xml2-config
    brew install libxslt
    bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/
    bundle install
    

    If you don't use bundler, run these commands instead:

    gem uninstall nokogiri libxml-ruby
    brew update
    brew uninstall libxml2
    brew install libxml2 --with-xml2-config
    brew install libxslt
    gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/
    

    In your app, you should require nokogiri first, to force the app to load the dynamic libxml2 library instead of the older system version of libxml2 loaded by gems that failed to specify which library to load.

    0 讨论(0)
  • 2020-11-27 12:08

    If you installed Nokogiri with gem install nokogiri, you can resolve this warning by running gem pristine nokogiri to recompile the gem's C extension.

    If you installed Nokogiri with bundle install, you can resolve this warning by running bundle exec gem pristine nokogiri to recompile the C extension of the gem wherever Bundler installed it.

    0 讨论(0)
  • 2020-11-27 12:10
    gem uninstall nokogiri
    bundle  #install nokogiri again
    

    If that fails with "libxml2 is missing." and you see gems/nokogiri-1.5.0/ext/nokogiri/mkmf.log trying to use "/usr/bin/gcc-4.2 ...", then you're missing /usr/bin/gcc-4.2

    Solution:

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

    Before:

    $ ll /usr/bin/gcc*
    lrwxr-xr-x  1 root  wheel  12 Jan 15 00:16 /usr/bin/gcc -> llvm-gcc-4.2
    

    After:

    $ ll /usr/bin/gcc*
    lrwxr-xr-x  1 root  wheel  12 Jan 15 00:16 /usr/bin/gcc -> llvm-gcc-4.2
    lrwxr-xr-x  1 root  wheel  12 Jan 15 21:07 /usr/bin/gcc-4.2 -> /usr/bin/gcc
    

    If you're really missing libxml2 libxslt, then

    brew update
    brew install libxml2 libxslt
    brew link libxml2 libxslt
    bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.8.0/include/libxml2/ --with-xml2-lib=/usr/local/Cellar/libxml2/2.8.0/lib/ --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/
    bundle
    

    FYI: I'm running Mountain Lion with brew, and bundler.

    0 讨论(0)
  • 2020-11-27 12:12

    OS: Catalina

    Warning: warning nokogiri was built against libxml version 2.9.10 but has dynamically loaded 2.9.4

    I followed Michiel de Mare steps, but brew install libxml2 --with-xml2-config failed with invalid option error. So I installed libxml2 and libxslt and took note of the output from both commands.

     brew install libxml2                   
    ==> Downloading https://homebrew.bintray.com/bottles/libxml2-2.9.10_2.catalina.bottle.tar.gz
    Already downloaded: /Users/alberto/Library/Caches/Homebrew/downloads/9ddf5cb90fd16a7eb531e37bb748fd392f30214d9fe1568b2b70d28cc368c8f7--libxml2-2.9.10_2.catalina.bottle.tar.gz
    ==> Pouring libxml2-2.9.10_2.catalina.bottle.tar.gz
    ==> Caveats
    libxml2 is keg-only, which means it was not symlinked into /usr/local,
    because macOS already provides this software and installing another version in
    parallel can cause all kinds of trouble.
    
    If you need to have libxml2 first in your PATH run:
      echo 'export PATH="/usr/local/opt/libxml2/bin:$PATH"' >> ~/.zshrc
    
    For compilers to find libxml2 you may need to set:
      export LDFLAGS="-L/usr/local/opt/libxml2/lib"
      export CPPFLAGS="-I/usr/local/opt/libxml2/include"
    
    For pkg-config to find libxml2 you may need to set:
      export PKG_CONFIG_PATH="/usr/local/opt/libxml2/lib/pkgconfig"
    
    ==> Summary
                                                                        
    0 讨论(0)
提交回复
热议问题