PHPからJavaScriptを実行できるExtension「v8js」をビルド(CentOS7で成功)
PHP+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のときのログ
目次
- v8をソースコードからビルド
- v8jsをビルド
- 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 >