CentOS6でv8をソースからビルド
React-PHP-V8jsを試したくてV8をソースコードからコンパイル・ビルドしたときの覚書。YUM経由のV8は古い(3.14)のでv8jsをビルド出来ない。
環境: CentOS 6.6
結局CentOS6だとv8jsをビルドしたものの読み込むときにエラーになる。
CentOS7だとGCCやPythonを別途アップデートしなくてもビルド出来るのでオススメ。
参考
- v8js/README.Linux.md at master · preillyme/v8js | GitHub
- LinuxBuildInstructionsPrerequisites - chromium - Prerequisites for building. - An open-source project to help move the web forward. - Google Project Hosting
目次
- ツール群「depot_tools」をインストール
- V8をダウンロードしてインストール
- Python 2.7をインストール
- V8をビルド(失敗)
- GCCを4.8にアップデートする
- V8をビルド(3.31で成功)
1.ツール群「depot_tools」をインストール
ビルド用にLinux開発ツールをインストールしておく。
# yum groupinstall "Development Tools"
# cd /opt/software/
# git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
# export PATH=`pwd`/depot_tools:"$PATH"
2.V8をダウンロードしてインストール
depot_toolsのfetchコマンドでダウンロードする
# fetch v8
エラー
Failed to fetch file gs://chromium-clang-format/7219213d084db0ea8eaed8f4291814f4f46fad3a for v8/buildtools/linux64/clang-format. [Err: Traceback (most recent call last)
# cd v8/
ブランチを確認して最新に移動
# git branch -a
# git checkout 4.5.46
# gclient sync
やっぱりエラー
AttributeError: ZipFile instance has no attribute '__exit__'
python 2.6だと起きるらしい。
3.Python 2.7をインストール
別記事を参照
4.V8をビルド(失敗)
もう一度
# cd /opt/software/v8/
# gclient sync
________ running '/root/.pyenv/versions/2.7.10/bin/python v8/build/gyp_v8' in '/opt/software'
Updating projects from gyp files...
# make clean all
# make native library=shared -j8
エラー
PYTHONPATH="/opt/software/v8/tools/generate_shim_headers:/opt/software/v8/build::/opt/software/v8/build/gyp/pylib:" \
GYP_GENERATORS=make \
build/gyp/gyp --generator-output="out" build/all.gyp \
-Ibuild/standalone.gypi --depth=. -S.native -Dcomponent=shared_library -Dv8_enable_backtrace=1 -Darm_fpu=default -Darm_float_abi=default
make[1]: Entering directory `/opt/software/v8/out'
CC(target) /opt/software/v8/out/native/obj.target/icudata/third_party/icu/linux/icudtl_dat.o
ACTION tools_gyp_v8_gyp_js2c_target_js2c tools_gyp_v8_gyp_js2c_target_js2c.intermediate
/opt/software/v8/third_party/llvm-build/Release+Asserts/bin/clang: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /opt/software/v8/third_party/llvm-build/Release+Asserts/bin/clang)
/opt/software/v8/third_party/llvm-build/Release+Asserts/bin/clang: /lib64/libc.so.6: version `GLIBC_2.15' not found (required by /opt/software/v8/third_party/llvm-build/Release+Asserts/bin/clang)
/opt/software/v8/third_party/llvm-build/Release+Asserts/bin/clang: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /opt/software/v8/third_party/llvm-build/Release+Asserts/bin/../lib/libstdc++.so.6)
ACTION tools_gyp_v8_gyp_js2c_target_js2c_experimental tools_gyp_v8_gyp_js2c_target_js2c_experimental.intermediate
make[1]: *** [/opt/software/v8/out/native/obj.target/icudata/third_party/icu/linux/icudtl_dat.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make[1]: Leaving directory `/opt/software/v8/out'
make: *** [native] Error 2
公式ページ見たらGCCは4.6以上が必要らしい。
# gcc --version
cc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11)
5.GCCを4.8にアップデートする
別記事を参照
6.V8をビルド(3.31で成功)
もう一度
# cd /opt/software/v8/
# make clean all
# make native library=shared -j8
同じエラー
`GLIBC_2.14' not found
`GLIBC_2.15' not found
このエラーは付属しているclangが出力しているので、clangをYUM経由でインストールしてみる。
# yum install clang
# make clean all
# make native library=shared -j8
インストールしたclangを使ってくれない。同じエラーになるので古いバージョンを試していくと3.31で成功した。
# git branch -a
# git checkout branch-heads/3.31
# make clean all
# make native library=shared -j8
ちなみにCentOS7だとあっさりと成功した。V8 version 4.5.46
もうCentOS6の時代は終わったと思った瞬間。
< Related Posts >