CentOS6でv8をソースからビルド

centos_v8React-PHP-V8jsを試したくてV8をソースコードからコンパイル・ビルドしたときの覚書。YUM経由のV8は古い(3.14)のでv8jsをビルド出来ない。

環境: CentOS 6.6

 

結局CentOS6だとv8jsをビルドしたものの読み込むときにエラーになる。

CentOS7だとGCCやPythonを別途アップデートしなくてもビルド出来るのでオススメ。

 

参考

 

目次 

  1. ツール群「depot_tools」をインストール
  2. V8をダウンロードしてインストール
  3. Python 2.7をインストール
  4. V8をビルド(失敗)
  5. GCCを4.8にアップデートする
  6. 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 >