--寫在開始
按照今年的計划,需要研究一個有使用價值的linux下的C++開源項目,無意中發現了V8,覺得還不錯,於是記錄下來,希望對大家有所幫助。V8是一個由丹麥Google開發的開源JavaScript引擎,用於Google Chrome中,Chrome是現有的瀏覽器中速度相對比較快的一個,這完全得益於V8的效率,另外,作為一個獨立的項目,V8也可以嵌入到我們自己開發的項目中運行,查了一下才知道,前一這被大家熱炒的Node.js也是基於V8的,可見V8值得大家稍微研究一番。
作為一個開源JavaScript引擎,V8是以源代碼的形式開源,而我們使用的時候是以庫的形式進行使用,這就涉及到源代碼的編譯,當然你可以上網找別人build好的libv8.a或者libv8.so,使用就是了,但是既然是學習這個庫,我們有時候是需要進行代碼調試的,用別人的庫,有的時候調試可能會有問題,還是自己動手豐衣足食啊,呵呵,那么我們開始自己build吧。
按照項目官方Wiki上面的介紹,我用Git clone 了一份代碼,命令如下:
但是當我build的時候我才發現,原來最新版的V8 build 腳本已經改成了GYP,而make dependencies 這個時候在GIT的代碼庫里面怎么也下不了GYP這些腳本,於是我不得不重新安裝Subversion,然后用:
make dependencies
這才拿齊了build所需要的所有文件,let’s go, 到V8的路徑下執行如下命令:
經過大約5分鍾的編譯,終於成功的build出來了我需要的libv8.so.
那么這個庫是否已經成功的build好了呢,那么讓我們來驗證一下吧,找個最簡單的demo。
一下是google官方的demo,簡單明了。
int main( int argc, char* argv[]) {
// Create a stack-allocated handle scope.
HandleScope handle_scope;
// Create a new context.
Persistent<Context> context = Context::New();
// Enter the created context for compiling and
// running the hello world script.
Context::Scope context_scope(context);
// Create a string containing the JavaScript source code.
Handle<String> source = String::New( " 'Hello' + ', World!' ");
// Compile the source code.
Handle<Script> script = Script::Compile(source);
// Run the script to get the result.
Handle<Value> result = script->Run();
// Dispose the persistent context.
context.Dispose();
// Convert the result to an ASCII string and print it.
String::AsciiValue ascii(result);
printf( " %s\n ", *ascii);
return 0;
}
將段代碼存成hello_world.cpp,並執行下面命令:
然后執行./ hello_world 這個時候你會看到屏幕上已經輸出了 Hello World!
如果對代碼的某一部分感興趣你就可以打開GDB在相應的位置設置斷點,單步的走代碼。
恭喜你到現在為止,你已經可以無所顧忌的開始 V8 之旅啦。