therubyracer - Gem::Ext::BuildError: ERROR: Failed to build gem native extension

user2490003 picture user2490003 · May 8, 2014 · Viewed 44.4k times · Source

I'm trying to install the following gem versions on Mavericks

  • libv8 (3.16.14.3)
  • therubyracer (0.12.1)

Obviously therubyracer gems depends on libv8.

1) Installing libv8

What is libv8? My bit of research seems to indicaite it's some sort of javascript library used by Google Chrome?

I was having trouble installing it, but this great post had both my error and a well-explained answer on how to bypass it.

So I installed libv8 with

gem install libv8 -- --with-system-v8

It's my understanding that this installs the gem but uses my local system installation of the v8 library instead of... the version that comes with the gem? Either way, it was successful.

2) Installing therubyracer

During the next step, I had trouble install therubyracer gem. I'm not quite sure what this gem does, just that it's a dependency of a rails project I'm trying to bundle install.

It gives me the following error:

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

    /Users/jeeves.butler/.rvm/rubies/ruby-1.9.2-p290/bin/ruby extconf.rb 
checking for main() in -lpthread... yes
checking for main() in -lobjc... yes
checking for v8.h... 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
    --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/jeeves.butler/.rvm/rubies/ruby-1.9.2-p290/bin/ruby
    --with-pthreadlib
    --without-pthreadlib
    --with-objclib
    --without-objclib
    --enable-debug
    --disable-debug
    --with-v8-dir
    --without-v8-dir
    --with-v8-include
    --without-v8-include=${v8-dir}/include
    --with-v8-lib
    --without-v8-lib=${v8-dir}/lib
/Users/jeeves.butler/.rvm/gems/ruby-1.9.2-p290/gems/libv8-3.16.14.3/ext/libv8/location.rb:50:in 
'configure': You have chosen to use the version of V8 found 
on your system (Libv8::Location::System::NotFoundError)
and *not* the one that is bundled with the libv8 rubygem. However,
it could not be located. please make sure you have a version of
v8 that is compatible with 3.16.14.3 installed. You may
need to special --with-v8-dir options if it is in a non-standard
location

thanks,
The Mgmt

    from /Users/jeeves.butler/.rvm/gems/ruby-1.9.2-p290/gems/libv8-3.16.14.3/lib/libv8.rb:7:in `configure_makefile'
    from extconf.rb:32:in `<main>'

extconf failed, exit code 1

Gem files will remain installed in /Users/jeeves.butler/.rvm/gems/ruby-1.9.2-p290/gems/therubyracer-0.12.1 for inspection.
Results logged to /Users/jeeves.butler/.rvm/gems/ruby-1.9.2-p290/extensions/x86_64-darwin-13/1.9.1/therubyracer-0.12.1/gem_make.out

From what I can gather, I chose to install libv8 using my local V8 library instead of what was provided with libv8, but now that local installation could not be located.

  • How do I check if I do indeed have V8 installed and how do I locate it?
  • I tried a few of the specified flags, none of them seemed to point the gem to the correct installation directory
  • This might be a separate topic, but what is extconf.rb? I've seen it in a few places. And what's it trying to do with the gcc compiler in specific?

Thanks!!

EDIT:

  1. I tried this solution of uninstalling libv8 and re-installing via brew install. It was mentioned in a couple of similar questions as well. No luck.

  2. I also tried the CC, CXX, and CPP environment variables as described here, although I don't think that has any effect as it was already picking up my gcc v4.6 compiler.

Answer

rider_on_rails picture rider_on_rails · Sep 4, 2014

This steps worked for me.

OS: Maverick Ruby: 2.1.1

gem uninstall libv8
gem install therubyracer -v '0.11.3'
gem install libv8 -v '3.11.8.13' -- --with-system-v8