I would appreciate some help in getting gem install therubyracer
to work. Here is the error:
$ gem install therubyracer
Building native extensions. This could take a while...
ERROR: Error installing therubyracer:
ERROR: Failed to build gem native extension.
/Users/david/.rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb
checking for main() in -lobjc... yes
*** 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/david/.rvm/rubies/ruby-1.9.3-p194/bin/ruby
--with-objclib
--without-objclib
extconf.rb:15:in `<main>': undefined method `include_path' for Libv8:Module (NoMethodError)
Here are some notable steps that I ran before the error. They worked fine:
$ gem install libv8
$ brew install v8
My environment is:
- Mac OS X Lion 10.7.4
- ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.4.0] (via rvm)
- V8 version 3.9.24 (via homebrew)
Considering none if the above worked for me 100%, I thought I'd post what did (as part of a rails project):
This made sure I got the latest
therubyracer
, and also a more recent version oflibV8
, and seem to fix the multiple issues I was hitting, from missing libv8.a files, to undefined methods.I got a similar issue, but it was also complaining about not finding g++-4.2. I did have XCode command line tools installed, but it was looking for /usr/bin/g++-4.2, I had g++ (which was a symbolic link pointing to llvm-g++-4.2). Anyway, I just created a symbolic link to g++ and tried the bundle install again... it worked!
$ cd /usr/bin
$ sudo ln -s g++ g++-4.2
At last I use therubyracer 0.11.0beta5 as a solution.
Using therubyracer (0.11.0beta5)
add following on Gemfile
then
bundle install
Mac OSX 10.8 Moutain Lion
For anyone encountering this issue on Mac OSX 10.8 Mountain Lion when attempting to upgrade their Gemfile with
gem 'therubyracer', '0.11.0'
, just upgrading the systemlibv8
gem worked for me (no uninstallation of any other gem necessary):Edit
If you use Travis-CI (or other CI tools located on other servers, I assume), you will need to explicitly add the
libv8
gem to your Gemfile as well:Gemfile
then
bundle install
as usual. Just note thatlibv8
can take a significant amount of time to install and I've noticed that it may end up being the cause of going over Travis CI's timeout limits, causing your build to fail. You can mitigate this slightly be not including development environment gems in your builds:.travis.yml
Update
Yep, pretty much all my Travis builds timeout and fail because of this. If anyone knows a way to solve this problem (I would hope "downgrade
therubyracer
" is a last resort), please leave a comment!Update 2
This may not work for all apps, but it seems that my Rails 3.2.9 apps didn't actually need
therubyracer
orlibv8
after all. After removing those gems from my Gemfile, I confirmed that my specs passed, pushed again to Travis and it built successfully. So, I guess getting rid of those gems (if you're not sure you actually need them) is at least worth a try.Update 3
Thanks to Paul Annesley for confirming that if you're on Mac OS X 10.8 Mountain Lion, you don't need
therubyracer
gem at all since the OS already comes bundled with Apple JavaScriptCore, its own Javascript runner. At the time of the original answer, I was on Snow Leopard and hence needed it.But, why is this happening, you ask? And why does uninstalling
libv8
and reinstallingtherubyracer
fix the problem?The answer is at the bottom of the error message (from orig post). Ignore the stuff about
This is an incorrect assumption by whoever wrote that error message. At the bottom, you see what Ruby has to say about it:
In my case, I was trying to install
therubyracer-0.9.8
withbundle install
, and for some reason, it was trying to use my copy oflibv8-3.11.8.13
, which had been installed at some point, probably as a dependency of some other gem.I don't know why it was trying to use the newer version, because
therubyracer.gemspec
containss.add_dependency "libv8", "~> 3.3.10"
. And myGemfile.lock
says to uselibv8 (3.3.10.2)
. But alas, that is indeed what was happening.And it's true that
Libv8:Module
does not have the methodinclude_path
inlibv8-3.11.8.13
, but it does inlibv8-3.3.10.2
So that is why uninstalling all of your versions of
libv8
and then re-installingtherubyracer
works. Because all the versions oflibv8
that do not have the methodinclude_path
are removed completely, and thelibv8
that does have the methodinclude
path is reinstalled when you reinstall oftherubyracer
.