V8 JavaScript Engineを使ってみる。
node.jsでアレコレしようと思うと、C++でアドオンを作る必要が出てきて、
V8 JavaScript Engineをシンプルに動かして試したくなった。
今回は、サンプルを動かすまでの備忘録。
いろんなブログを漁ると、V8は、2年前に流行ってたんですね。。。
環境
OS:Ubuntu 12.04
CPU:64bit
depot_toolsを入手する。
$ mkdir $HOME/tools $ cd tools $ git clone https://git.chromium.org/chromium/tools/depot_tools.git $ vi ~/.bashrc export PATH=$PATH:$HOME/tools/depot_tools
V8をビルドする。
$ mkdir v8 $ cd v8 $ git clone git://github.com/v8/v8.git v8 && cd v8 $ make dependencies $ make x64.release -j8 (64bitでコア8個) $ make x64.release.check $ cd ..
サンプルコード
$ vi hello_world.cpp
#include <v8.h> using namespace v8; int main(int argc,char* argv[]) { HandleScope handle_scope; Persistent<Context> context = Context::New(); Context::Scope context_scope(context); Handle<String> source = String::New("'hello' + ' world'"); Handle<Script> script = Script::Compile(source); Handle<Value> result = script->Run(); context.Dispose(); String::AsciiValue ascii(result); printf("%s\n", *ascii); return 0; }
サンプルコードのビルド
なんか、どこにもドキュメントがないけど、 ./v8/out/x64.release/obj.target/tools/gyp/以下に 静的ライブラリができてたので、それを使う。
$ g++ -I./v8/include hello_world.cpp -o hello_world ./v8/out/x64.release/obj.target/tools/gyp/libv8* -lpthread
サンプルの実行
$hello_world hello world (出力)
やったぁ!動いた!これで、わざわざnode-gypとか使わずにコードを試せます。