原因は3つ
- libv8のインストールに失敗している
gem install therubyracerでlibv8が一緒にインストールされる。libv8は特にエラー無くインストールが終了するので、正常かと思ってしまうのだが、どうもインストールに失敗しているようす。以下のエラーが出る。
c++ -shared -o v8.so v8_v8.o v8_callbacks.o v8_weakref.o v8_date.o v8_context.o v8_handle.o v8_external.o rr.o v8_function.o v8_exception.o v8_try_catch.o v8_string.o v8.o v8_value.o v8_message.o v8_array.o v8_debug.o v8_locker.o v8_template.o v8_script.o v8_object.o -L/usr/home/seike/rails/r3.1.test/vendor/bundle/gems/libv8-3.3.10.2/lib/libv8/build/v8 -Wl,-R/usr/home/seike/rails/r3.1.test/vendor/bundle/gems/libv8-3.3.10.2/lib/libv8/build/v8 -L. -L/usr/local/lib -Wl,-R/usr/local/lib -L. -rpath=/usr/lib:/usr/local/lib -pthread -rdynamic -Wl,-soname,v8.so -Wl,-R -Wl,/usr/local/lib -L/usr/local/lib -lruby18 -lpthread -lcrypt -lm -L/usr/lib -rpath=/usr/lib:/usr/local/lib -pthread -lv8 /usr/bin/ld: cannot find -lv8 *** Error code 1
makeとgmakeの使い分けが出来ていないので、発生していると思われる。 libv8のディレクトリに移動して、gmakeと打ちましょう。% cd vendor/bundle/gems/libv8-3.3.10.2/lib/libv8 % gmake
libv8のコンパイルが始まります。
- execinfo.hが無いというエラーがでて、FreeBSDでは「libexecinfo」をインストールしろというtipsもある。
しかしながら、単純にインストールしても結局エラーになる。なので、bundle installを実行するときに「--with-opt-dir=/usr/local」が付与されるように、 以下の設定をしましょう。% vi ~/.bundle/config BUNDLE_BUILD__THERUBYRACER: --with-opt-include=/usr/local/include
- 実は上の「--with-opt-dir」をしても、作成されるv8.soが不十分。それはlibexecinfoがリンクされていないから。
そのためrake等を実行した場合エラーになる。libexecinfoをリンクされるように、無理矢理Makefileを修正して、v8.soを再作成する。
% cd vendor/bundle/ruby/1.8/gems/therubyracer-0.9.4/ext/v8 % vi Makefile LIBSの最後に「-lexeinfo」を追加。 LIBS = $(LIBRUBYARG_SHARED) -lpthread -lcrypt -lm -L/usr/lib -rpath=/usr/lib:/usr/local/lib -pthread -lv8 -lexecinfo % rm v8.so % make <- v8.soが再作成される。 % cp v8.so ../../lib/
bundlerにて、gemインストール時に設定するオプションの付けかた。
mysqlのビルド時に--with-mysql-configを自動的に設定するやりかたです。
% bundle config build.mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config
マニュアル(http://gembundler.com/rationale.html)に書いてありました。
0 件のコメント:
コメントを投稿