アラのアラアラしい日記

こっそりかいてます

gccとかlibv8とかtherubyracerとかのinstallでハマった

よっし、忘れないうちに前回のエントリの続きを書いていきます!

YosemiteにOSをupdateしてから、bundle installが出来なくなったので、
エラー内容からgccのバージョンアップを行いました。

gccのバージョンアップ方法は、以下のとおりです。

$ brew tap homebrew/versions
$ brew install gcc49

homebrewを使いました。
まずは、homebrew/versionsをtapしてきて、 その中にある最新のgcc(現時点では4.9系)をinstallします。

参考: Homebrew/homebrew-versions · GitHub

デフォルトでは、gccは/usr/bin/にありますが、
新しくinstallしたgccのシムリンクを/usr/local/bin/に貼ると安心です。

$ which gcc
/usr/bin/gcc
$ ln -s /usr/local/bin/gcc-4.9 /usr/local/bin/gcc
$ ln -s /usr/local/bin/g++-4.9 /usr/local/bin/g++
$ which gcc
/usr/local/bin/gcc
$ gcc --version
gcc (Homebrew gcc49 4.9.1) 4.9.1
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

こんな感じの結果が得られると思います。

このあとにbundle installをすると、

~~~~(略)~~~~
checking for main() in -lpthread... yes
checking for main() in -lobjc... yes
checking for v8.h... no
*** extconf.rb failed ***
~~~~(略)~~~~

今度はv8がないよ!というエラーが出ました。

システムに既にインストールされているv8をbundlerが読むように設定しました。

$ bundle config build.libv8 --with-system-v8

しかし、このあとにまたbundle installをすると、
今度はtherubyracerがインストールできないよと怒られます。

色々調べみた結果、localの中に2つのバージョンのlibv8が存在していることに気づきました。

libv8をアンインストールしてから、v8をインストール、
そのあとにtherubyracerをインストールすることでbundle installが成功しました。

$ gem uninstall libv8
$ brew install v8
$ gem install therubyracer

v8はjsの実行エンジンなのですが、
それをrubyから使っちゃおうぜというのがtherubyracerだそうです。
環境に応じて必要なv8を提供してくれるのがlibv8です。

やー、べんきょうになりました。