PHPからJavaScriptを実行できるExtension「v8js」をビルド(CentOS7で成功)

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

環境(CetnOS6): CentOS 6.6, gcc 4.8.2-15
環境(CetnOS7): CentOS 7.1, gcc 4.8.3-9

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

 

結局CentOS6だとPHPエクステンションの読み込みでエラーになる。CentOS7だとREADME.Linux.md通りで簡単に成功した。

以下CentOS6のときのログ

 

目次

  1. v8をソースコードからビルド
  2. v8jsをビルド
  3. PHPの設定

 


1.v8をソースコードからビルド

別記事を参考に

v8をビルドしたディレクトリに移動してファイルをコピー
# cd /opt/software/v8/
# cp out/native/lib.target/lib*.so /usr/lib/
# cp -R include/* /usr/include
# echo -e "create /usr/lib/libv8_libplatform.a\naddlib out/native/obj.target/tools/gyp/libv8_libplatform.a\nsave\nend" | sudo ar -M

 


2.v8jsをビルド

v8jsをクローンしてビルド実行
# cd /opt/software/
# git clone https://github.com/preillyme/v8js.git
# cd v8js
# phpize
# ./configure
# make
# make test
# make install

Installing shared extensions:     /usr/lib64/php/modules/

 


3.PHPの設定

作成したエクステンションをPHPで読み込む
# echo "extension=v8js.so" > /etc/php.d/v8js.ini

PHP再起動
# /etc/rc.d/init.d/php-fpm restart

エラー

Starting php-fpm: [11-Jun-2015 13:01:12] NOTICE: PHP message: PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/v8js.so' - libv8.so: cannot open shared object file: No such file or directory in Unknown on line 0

共有ライブラリを確認
# ldconfig -p | grep libv8

再読み込みして再起動
# ldconfig
# /etc/rc.d/init.d/php-fpm restart

エラー

Starting php-fpm: [11-Jun-2015 13:23:52] NOTICE: PHP message: PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/v8js.so' - /usr/lib64/php/modules/v8js.so: undefined symbol: _ZSt25__throw_bad_function_callv in Unknown on line 0

devtoolset経由でビルドしたのが影響したのかな?

これはもうCentOS6では無理だと判断。

 

CentOS7だと何事も無くPHPエクステンションの読み込みまで完了した。

確認
# php -i | grep v8

v8js
v8js.flags => no value => no value
v8js.use_array_access => 0 => 0
v8js.use_date => 0 => 0

今の本番環境は全部CentOS6なので、この技術を使うのはもう少し先にする。

 

< Related Posts >