PHPからJavaScriptを実行できるExtension「v8js」をビルド(失敗編)
PHP+React.jsで開発したくて彷徨っている時の覚書。
環境: CentOS 6.6
PHPからJavaScriptを実行できるExtensionをビルドする。
先に結論を書くと、YUM経由のV8は古い。V8をソールからビルドしてもCentOS6の環境では動かない。CentOS7だとREADME通りにビルド出来る。
成功編は明日アップする。
目次
- libv8をビルド
- 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 >