PHPからJavaScriptを実行できるExtension「v8js」をビルド(失敗編)

centos_php_v8jsPHP+React.jsで開発したくて彷徨っている時の覚書。

環境: CentOS 6.6

PHPからJavaScriptを実行できるExtensionをビルドする。

 

先に結論を書くと、YUM経由のV8は古い。V8をソールからビルドしてもCentOS6の環境では動かない。CentOS7だとREADME通りにビルド出来る。

成功編は明日アップする。

 

目次

  1. libv8をビルド
  2. v8jsをビルド

 


1.libv8をビルド

v8jsをビルドしたときに「libv8がない」と怒られたので、これでいいのかなぁと思いつつやってみた。

結局V8をソースからビルドすれば必要なかった。

Rubyの最新版をインストールするのは前の記事を参考に。

Rubyのbundlerをインストールしておく
# gem install bundler --no-rdoc --no-ri

libv8をインストールする
# cd /opt/software
# git clone git://github.com/cowboyd/libv8.git
# cd libv8/
# bundle install
# bundle exec rake checkout
# bundle exec rake compile

エラー

No manual entry for git-svn
/opt/software/libv8/ext/libv8/checkout.rb:48:in `check_git_svn!': git-svn not installed! (RuntimeError)

GitHub上で検索してみると「git help svn」がないとこのエラーになるらしい。

前に作っておいたgitのソースコードをクローンした場所に移動して、ついでに最新版のgitをインストールする。
# cd /opt/software/git
# git pull
# make clean all
# make all doc

エラー1回目

/bin/sh: line 1: asciidoc: command not found

エラー2回目

/bin/sh: line 1: xmlto: command not found

YUM上にあったのでインストール
# yum install asciidoc xmlto

再度make
# make all doc
# make install install-doc

確認
# git --version

git version 2.4.3.368.g7974889

# git help svn

 

もう一度libv8に戻る
# cd /opt/software/libv8/
# bundle exec rake compile

エラー

sh: patch: command not found

YUM経由でインストール
# yum install patch

再挑戦
# bundle exec rake compile

無事完了

インストール
# gem install libv8

Fetching: libv8-3.16.14.7-x86_64-linux.gem (100%)
Successfully installed libv8-3.16.14.7-x86_64-linux
Parsing documentation for libv8-3.16.14.7-x86_64-linux
Installing ri documentation for libv8-3.16.14.7-x86_64-linux
Done installing documentation for libv8 after 0 seconds
1 gem installed

 


2.v8jsをビルド

次はPHP extensionを作る。

pecl経由でなくてソースコードからビルドしてみた。
# cd /opt/software/
# git clone
https://github.com/preillyme/v8js.git
# cd v8js/
# phpize
# ./configure

エラー

checking for V8 Javascript Engine... yes, shared
checking for V8 files in default path... not found
configure: error: Please reinstall the v8 distribution
ERROR: `/var/tmp/v8js/configure --with-v8js' failed

libv8だけではダメだった。YUM経由でv8をインストール。
# yum install v8-devel

再挑戦
# ./configure

エラー

checking for V8 version... NONE
configure: error: could not determine libv8 version

YUM経由とlibv8でバージョンが違うのがダメなのかな?libv8をインストールし直してみる。
# cd /opt/software/libv8/
# gem uninstall libv8
# gem install libv8 -- --with-system-v8

Fetching: libv8-3.16.14.7-x86_64-linux.gem (100%)
Successfully installed libv8-3.16.14.7-x86_64-linux
Parsing documentation for libv8-3.16.14.7-x86_64-linux
Installing ri documentation for libv8-3.16.14.7-x86_64-linux
Done installing documentation for libv8 after 0 seconds
1 gem installed

戻って再挑戦
# cd /opt/software/v8js/
# ./configure

同じエラー

configureの解析。。。内部で下記エラーになってた。

/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/libv8.so: undefined reference to `clock_getres'
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/libv8.so: undefined reference to `clock_gettime'
collect2: ld returned 1 exit status

CXXFLAGSに「-lrt」を追加するといいらしい。直接./configureを編集(4688行目)。

CXXFLAGS="-g -O2 -lrt"

今度は下記エラー

configure: error: libv8 must be version 3.24.6 or greater

YUM経由のv8が古い。

v8-develがインストールされた場所を確認
# rpm -ql v8-devel

v8をソースコードからコンパイルすることにした。

 

< Related Posts >