"gem install therubyracer -v '0.10.2'" on osx mavericks not installing

38,061

Solution 1

If you decide to use a newer therubyracer gem version, you will no longer have this problem

Otherwise:

brew tap homebrew/dupes # Thanks Tom
brew install apple-gcc42

export CC=/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2
export CXX=/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2
export CPP=/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2

brew uninstall v8

gem uninstall libv8

gem install therubyracer -v '0.10.2' # specify version

Solution 2

So I finally got it working after some struggling... thanks to Simon and Alvaro.

I have one thing to add though, using the flag --with-system-v8 did not work for me... So i removed my system v8 with

brew uninstall v8

And the run

gem install libv8

If you have already run gem install libv8 with the system v8 flag be sure to uninstall that gem version (do it by running gem uninstall libv8). The important thing is that you shouldn't use the one provided by brew, it does not seem to work in Mavericks (it gets installed well and bundler will report that your bundle is complete, but your app will fail when it tries to use v8).

To summarize the answer, doing the following worked for me:

brew install apple-gcc42
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2 /usr/bin/gcc
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2 /usr/bin/g++
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2 /usr/bin/cpp

brew uninstall v8
gem install libv8
gem install therubyracer

Solution 3

I had the same problem, this works for me:

therubyracer (0.10.2) & libv8 (3.3.10.4)

First of all:

  • brew install apple-gcc42
  • you must link all the binary files of the compilers (gcc, cpp, g++) to /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/<compiler>

After, you could try this:

  • brew install v8
  • gem install libv8 -v '3.3.10.4' -- --with-system-v8
  • gem install therubyracer -v 'therubyracer' or bundle install into the directory of the rails project.

Solution 4

I just had the same problem and one solution is currently to use apple-gcc42 instead of clang to compile both gems :

brew install apple-gcc42

And then you have the choice between doing some symlinks in /usr/bin for {gcc,g++,c++} binaries :

sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2 /usr/bin/gcc
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2 /usr/bin/g++
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2 /usr/bin/cpp

In fact g++ should be enough.

Or...you could export CC/CXX/CPP environment variables with paths corresponding to the binaries created by homebrew. That's surely a cleaner workaround.

A third solution is to download Xcode 4.6.3 and install it in the Applications folder. Then, enter in the terminal:

sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developer
gem install therubyracer

Once the gem has been installed you can switch back to Xcode 5.0 :

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

Solution 5

I found a workaround that worked without installing apple-gcc42.

This will work if the error message you're getting looks like this:

clang: error: no such file or directory: '/Users/mscottford/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a'

Then you should be able to do the following:

brew install v8
bundle install 
# after failing create link from brew installed v8 to error location
ln -s /usr/local/Cellar/v8/3.21.17/lib/libv8_base.x64.a /Users/mscottford/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a
bundle install

Source: https://github.com/cowboyd/therubyracer/issues/277#issuecomment-27734348

Share:
38,061
user2711889
Author by

user2711889

Updated on January 14, 2020

Comments

  • user2711889
    user2711889 over 4 years

    Trying to install therubyracer on mavericks using "gem install therubyracer -v '0.10.2'" but i am getting the following error:

    /Users/dennischen/.rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb
    checking for main() in -lobjc... yes
    creating Makefile
    
    make
    compiling rr.cpp
    clang: warning: argument unused during compilation: '-rdynamic'
    rr.cpp:48:1: warning: control reaches end of non-void function [-Wreturn-type]
    }
    ^
    1 warning generated.
    compiling v8.cpp
    clang: warning: argument unused during compilation: '-rdynamic'
    compiling v8_array.cpp
    clang: warning: argument unused during compilation: '-rdynamic'
    compiling v8_callbacks.cpp
    clang: warning: argument unused during compilation: '-rdynamic'
    compiling v8_context.cpp
    clang: warning: argument unused during compilation: '-rdynamic'
    compiling v8_date.cpp
    clang: warning: argument unused during compilation: '-rdynamic'
    compiling v8_debug.cpp
    clang: warning: argument unused during compilation: '-rdynamic'
    compiling v8_exception.cpp
    clang: warning: argument unused during compilation: '-rdynamic'
    v8_exception.cpp:10:16: warning: unused variable 'stack' [-Wunused-variable]
      static void* stack[20];
                   ^
    1 warning generated.
    compiling v8_external.cpp
    clang: warning: argument unused during compilation: '-rdynamic'
    v8_external.cpp:10:9: warning: unused variable 'references' [-Wunused-variable]
      VALUE references;
            ^
    1 warning generated.
    compiling v8_function.cpp
    clang: warning: argument unused during compilation: '-rdynamic'
    compiling v8_handle.cpp
    clang: warning: argument unused during compilation: '-rdynamic'
    compiling v8_locker.cpp
    clang: warning: argument unused during compilation: '-rdynamic'
    v8_locker.cpp:45:5: warning: control reaches end of non-void function [-Wreturn-type]
        }
        ^
    v8_locker.cpp:85:5: warning: control reaches end of non-void function [-Wreturn-type]
        }
        ^
    2 warnings generated.
    compiling v8_message.cpp
    clang: warning: argument unused during compilation: '-rdynamic'
    compiling v8_object.cpp
    clang: warning: argument unused during compilation: '-rdynamic'
    v8_object.cpp:77:19: warning: unused variable 'proto' [-Wunused-variable]
        Handle<Value> proto(rr_rb2v8(prototype));
                      ^
    1 warning generated.
    compiling v8_script.cpp
    clang: warning: argument unused during compilation: '-rdynamic'
    compiling v8_string.cpp
    clang: warning: argument unused during compilation: '-rdynamic'
    compiling v8_template.cpp
    clang: warning: argument unused during compilation: '-rdynamic'
    compiling v8_try_catch.cpp
    clang: warning: argument unused during compilation: '-rdynamic'
    compiling v8_v8.cpp
    clang: warning: argument unused during compilation: '-rdynamic'
    compiling v8_value.cpp
    clang: warning: argument unused during compilation: '-rdynamic'
    v8_value.cpp:100:9: warning: unused function 'ToInt32' [-Wunused-function]
      VALUE ToInt32(VALUE self) {
            ^
    1 warning generated.
    compiling v8_weakref.cpp
    clang: warning: argument unused during compilation: '-rdynamic'
    linking shared-object v8.bundle
    clang: error: no such file or directory: '/Users/dennischen/.rvm/gems/ruby-1.9.3-p194@panini/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a'
    make: *** [v8.bundle] Error 1
    

    can anyone help me figure out how to get this gem to work? I have the command line tools installed.

  • user2711889
    user2711889 over 10 years
    How do I switch the compiler to apple-gcc42?
  • bonum_cete
    bonum_cete over 10 years
    @Simon when I try to symlinc to the compilers I get a message that file exists. Is that the clang file? If I run bundle install it doesn't appear to be using gcc because the error is full of clang references.
  • jshkol
    jshkol over 10 years
    If you're using MacPorts you don't have to symlink to point to a different GCC version, there's a builtin command for that (see my answer).
  • Jamon Holmgren
    Jamon Holmgren over 10 years
    This worked for me. But I symlinked gcc into /usr/local/bin and restarted terminal so I could remove it after I installed libv8.
  • Nilesh
    Nilesh over 10 years
    This approach seems better than modifying symlinks
  • Abe Petrillo
    Abe Petrillo over 10 years
    Error: No available formula for apple-gcc42
  • TomFuertes
    TomFuertes over 10 years
    brew tap homebrew/dupes fixes "Error: No available formula for apple-gcc42"
  • Ode
    Ode over 10 years
    Huge +1 for this one. The gem would install on the CLI but RubyMine v6 was refusing to install it... setting this symlink resolved the issue finally. Thanks!
  • Kyle Fox
    Kyle Fox over 10 years
    This FINALLY fixed the issue for me — thanks! I tried M. Scott Ford's symlink solution below and it appeared to work, but threw an error when I actually tried to do anything (rake, rails, etc).
  • jackocnr
    jackocnr over 10 years
    Yer updating to therubyracer 0.12.0 fixed this issue for me.
  • Lloeki
    Lloeki about 10 years
    I had to add RUBYOPT=-rrubygems too, similarly to this question
  • Thibaut Barrère
    Thibaut Barrère about 10 years
    Worked perfectly for me (using bundle install too).
  • Pascal
    Pascal about 10 years
    exporting CC, CXX and CPP worked for me. Thanks. Installing another, more recent version of therubyracer worked as well, but as i'm i can not update the Gem Version in one of the projects: thanks a bunch:-)
  • Evo_x
    Evo_x about 10 years
    Worked for me on mavericks.
  • Dave Foster
    Dave Foster about 10 years
    This 1000%, cheers @M.ScottFord. I use rvm and therefore my ln statement was this: ln -s /usr/local/Cellar/v8/3.21.17/lib/libv8_base.x64.a ~/.rvm/gems/ruby-1.9.3-p327/gems/libv8-3.3.10.4/lib/libv8/bu‌​ild/v8/libv8.a
  • mrm
    mrm almost 10 years
    Symlinking homebrew binaries with that specific version, into /usr/bin, is a really bad idea. The next brew update that comes along and revs those paths will leave you in a broken state.
  • Chris Bloom
    Chris Bloom almost 10 years
    Thanks! This finally got me past bundle install after days of trial and error. Only thing I did differently was to uninstall all of the developer tools that were installed by brew until gcc --version reported that it was the Apple LLVM version and was configured with Xcode, then I moved the existing /usr/bin/gcc (et. al.) out before symlinking the apple-gcc42 libs, then instead of installing gcc49 (last time I tried it took over an our to configure) I just copied the original gcc, g++, and cpp libs back. Given that I tried 3 dozen different ways to find the one that worked for me, YMMV
  • turboladen
    turboladen almost 10 years
    Unfortunately, none of these solutions is working for me on OSX 10.9, ruby 2.1.0, and therubyracer 0.12.1.
  • miligraf
    miligraf about 9 years
    Thanks @th01 this worked for me...I tried everything I could find for 3 hours...in my case, it was the libv8 gem. Downloaded Xcode4.6.3 and ran it with that version and it was installed successfully. Here is a link with a quick tutorial on how to install multiple Xcode versions: blogs.oracle.com/mobile/entry/how_to_install_multiple_xcodes
  • shock_one
    shock_one over 8 years
    Worked on OS X 10.11 as well.
  • Wylliam Judd
    Wylliam Judd over 6 years
    I'm getting apple-gcc42: This formula either does not compile or function as expected on macOS when I run brew install apple-gcc42
  • Wylliam Judd
    Wylliam Judd over 6 years
    Using macOS Version 10.12.6
  • Wylliam Judd
    Wylliam Judd over 6 years
    I'm having a similar problem, but this solution isn't working. Any ideas? stackoverflow.com/questions/46104063/…
  • Wylliam Judd
    Wylliam Judd over 6 years
    apple-gcc42: This formula either does not compile or function as expected on macOS My macOS is 10.12.6
  • Wylliam Judd
    Wylliam Judd over 6 years
    When I download Xcode 4.6.3 and then run sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developer and then run gem install libv8 -v '3.3.10.4' I get: unable to locate xcodebuild, please make sure the path to the Xcode folder is set correctly! What am I doing incorrectly?