Libxml-ruby: Failed to create native gem extension

I am trying to install libxml-ruby . I installed libxml2 , libxslt and coreutils

I also read other posts on this issue, but no one solved this for me.

brew list libxslt

 /opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/bin/xslt-config /opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/bin/xsltproc /opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/include/libexslt/ (3 files) /opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/include/libxslt/ (21 files) /opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/lib/libexslt.0.dylib /opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/lib/libxslt.1.dylib /opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/lib/pkgconfig/ (2 files) /opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/lib/ (5 other files) /opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/share/aclocal/libxslt.m4 /opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/share/doc/ (90 files) /opt/boxen/homebrew/Cellar/libxslt/1.1.28_1/share/man/ (3 files) 

brew list libxml2

 /opt/boxen/homebrew/Cellar/libxml2/2.9.4/bin/xml2-config /opt/boxen/homebrew/Cellar/libxml2/2.9.4/bin/xmlcatalog /opt/boxen/homebrew/Cellar/libxml2/2.9.4/bin/xmllint /opt/boxen/homebrew/Cellar/libxml2/2.9.4/include/libxml2/ (47 files) /opt/boxen/homebrew/Cellar/libxml2/2.9.4/lib/libxml2.2.dylib /opt/boxen/homebrew/Cellar/libxml2/2.9.4/lib/cmake/libxml2/libxml2-config.cmake /opt/boxen/homebrew/Cellar/libxml2/2.9.4/lib/pkgconfig/libxml-2.0.pc /opt/boxen/homebrew/Cellar/libxml2/2.9.4/lib/ (3 other files) /opt/boxen/homebrew/Cellar/libxml2/2.9.4/share/aclocal/libxml.m4 /opt/boxen/homebrew/Cellar/libxml2/2.9.4/share/doc/ (153 files) /opt/boxen/homebrew/Cellar/libxml2/2.9.4/share/gtk-doc/ (55 files) /opt/boxen/homebrew/Cellar/libxml2/2.9.4/share/man/ (4 files) 

gem install libxml-ruby produces the following error:

 Building native extensions. This could take a while... ERROR: Error installing libxml-ruby: ERROR: Failed to build gem native extension. current directory: /opt/rubies/2.3.0/lib/ruby/gems/2.3.0/gems/libxml-ruby-2.9.0/ext/libxml /opt/boxen/rbenv/versions/2.3.0/bin/ruby -r ./siteconf20160630-68248-1qaz7dk.rb extconf.rb checking for libxml/xmlversion.h in /opt/include/libxml2,/opt/local/include/libxml2,/usr/local/include/libxml2,/usr/include/libxml2... no *** 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=/opt/boxen/rbenv/versions/2.3.0/bin/$(RUBY_BASE_NAME) --with-xml2-config --without-xml2-config --with-xml2-dir --without-xml2-dir --with-xml2-include --without-xml2-include=${xml2-dir}/include --with-xml2-lib --without-xml2-lib=${xml2-dir}/lib extconf failure: need libxml2. Install the library or try one of the following options to extconf.rb: --with-xml2-config=/path/to/xml2-config --with-xml2-dir=/path/to/libxml2 --with-xml2-lib=/path/to/libxml2/lib --with-xml2-include=/path/to/libxml2/include To see why this extension failed to compile, please check the mkmf.log which can be found here: /opt/boxen/rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/extensions/x86_64-darwin-14/2.3.0-static/libxml-ruby-2.9.0/mkmf.log extconf failed, exit code 1 Gem files will remain installed in /opt/boxen/rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/libxml-ruby-2.9.0 for inspection. Results logged to /opt/boxen/rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/extensions/x86_64-darwin-14/2.3.0-static/libxml-ruby-2.9.0/gem_make.out 
+11
source share
7 answers

The high level issue is shown here:

 checking for libxml/xmlversion.h in /opt/include/libxml2,/opt/local/include/libxml2,/usr/local/include/libxml2,/usr/include/libxml2... no 

Basically, the installer tells you that it cannot find libxml/xmlversion.h , but most likely it will most likely not be able to find your libxml2 location. It tells you which four directories it is looking for, so the first step is to check these directories to see if there is libxml2 .

Assuming this is in none of these four places, you need to find it. Run find / -name xmlversion.h ( sudo may be required) to find out where libxml2 was installed. Based on this answer, I assume that your problem is that brew installed it on /usr/local/Cellar/libxml2 , but you must confirm this. Once you have space, you can manually specify the gem install command. Something like this: (but fill path/to with your actual path)

 gem install libxml-ruby --with-xml2-dir=/path/to/libxml2 --with-xml2-lib=/path/to/libxml2/lib --with-xml2-include=/path/to/libxml2/include 
+5
source

I had a similar problem after I used brew to install libxml2

Brew link solved brew link --force libxml2

+18
source

Life after upgrading to MacOS Mojave.

 xcode-select --install brew install libxml2 brew link --force libxml2 gem install libxml-ruby -v '2.9.0' -- --use-system-libraries=true --with-xml2-include="$(xcrun --show-sdk-path)"/usr/include/libxml2 

In my example, I installed version 2.9.0 from the libxml-ruby library. Change the version line to suit your needs. If available, examine Gemfile.lock to determine which version of libxml-ruby Bundler you need to install.

+10
source

Homebrew:

libxml2 is only available for barrels, which means that it was not associated with / usr / local because macOS already provides this software, and installing another version in parallel can cause all kinds of problems.

So we need to set the path to libxml directly

 brew install libxml2 gem install libxml-ruby \ -- \ --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" 

PS

If you get an exception for the last rubies:

Just ignore it. The gem has been successfully installed. Just generating the Rdoc documentation failed.

 The internal error was: (NoMethodError) undefined method '[]' for nil:NilClass ERROR: While executing gem ... (NoMethodError) undefined method '[]' for nil:NilClass 
+5
source

I also used brew to install libxml2 but I needed the following options:

 brew install libxml2 --with-xml2-config gem install libxml-ruby -- --with-xml2-config=/usr/local/homebrew/opt/libxml2/bin/xml2-config 
+3
source

MacOS comes with libmxl2 installed, you never need to use a utility like brew to install it first. However, the headers are not in /usr/include/libxml but in /usr/include/libxml2/libxml .

The gem libxml-ruby configuration script tries to determine if libxml is libxml by compiling code that looks like this:

#include <libxml/xmlversion.h>

But when compiling with the compiler that comes with Xcode, only this code will work:

#include <libxml2/libxml/xmlversion.h>

The trick is to let the configure script know where to find the headers. On MacOS with Xcode installed, the following will work:

 gem install libxml-ruby -v '3.1.0' -- --with-xml2-include='xcrun --show-sdk-path'/usr/include/libxml2 
+1
source

One solution is:

 cd /Library/Developer/CommandLineTools/Packages/ $ open macOS_SDK_headers_for_macOS_10.14.pkg 

Forced reinstallation of headers for macOS 10.14.

+1
source

All Articles