v8编译
http://code.google.com/apis/v8/build.html
http://code.google.com/p/v8/wiki/BuildingOnWindows
環(huán)境:64位Windows7、vs2008
1、準(zhǔn)備:三個(gè)工具Subversion、Python、SCons。
設(shè)置環(huán)境變量保證在cmd中運(yùn)行 python --version、scons --version、svn --version 三個(gè)命令后能看到相應(yīng)的版本號(hào)。
2、下載v8
svn checkout http://v8.googlecode.com/svn/trunk/? v8
3、編譯v8
進(jìn)入到v8目錄,然后運(yùn)行:
scons env=”PATH:C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/bin;C:/Program Files (x86)/Microsoft Visual Studio 9.0/Common7/IDE;C:/Program Files/Microsoft Visual Studio 9.0/Common7/IDE;C:/Program Files (x86)/Microsoft Visual Studio 9.0/Common7/Tools,INCLUDE:C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/include;C:/Program Files (x86)/Microsoft SDKs/Windows/v6.0A/Include;C:/Program Files/Microsoft SDKs/Windows/v6.0A/Include,LIB;C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/lib;C:/Program Files (x86)/Microsoft SDKs/Windows/v6.0A/Lib;C:/Program Files/Microsoft SDKs/Windows/v6.0A/Lib ”
也可以不在v8目錄里,這時(shí)要運(yùn)行:
scons –C <v8的路徑> env=”….”;
vs2008在64位win7里被分裂開(kāi)了所以這個(gè)命令比32的麻煩。
/v8/obj文件夾里就是生成的文件
?
4、一個(gè)例子hello_world
v8文件夾里建一個(gè)hello_world.cpp
| ? int main(int argc, char* argv[]) {? // Create a string containing the JavaScript source code.? String source = String::New("'Hello' + ', World'");? // Compile the source code.? Script script = Script::Compile(source);?? // Run the script to get the result.? Value result = script->Run();? // Convert the result to an ASCII string and print it.? String::AsciiValue ascii(result);? printf("%s/n", *ascii);? return 0;} |
?
沒(méi)想到編譯這么簡(jiǎn)單的一段代碼卻出了問(wèn)題,用了一晚上外加一上午的時(shí)間搞定了問(wèn)題。
一開(kāi)始我是按照網(wǎng)站上說(shuō)的運(yùn)行??? cl /Iinclude hello_world.cpp v8.lib
結(jié)果是:
用于 x64 的 Microsoft (R) C/C++ 優(yōu)化編譯器 15.00.30729.01 版版權(quán)所有(C) Microsoft Corporation。保留所有權(quán)利。hello_world.cppMicrosoft (R) Incremental Linker Version 9.00.30729.01Copyright (C) Microsoft Corporation.? All rights reserved./out:hello_world.exehello_world.objv8.libhello_world.obj : error LNK2019: 無(wú)法解析的外部符號(hào) "public: __cdecl v8::HandleScope::~HandleScope(void)" (??1HandleScope@v8@@QEAA@XZ),該符號(hào)在函數(shù) main 中被引用。。。。。。。。。。。。hello_world.exe : fatal error LNK1120: 11 個(gè)無(wú)法解析的外部命令 |
?
這個(gè)錯(cuò)誤的原因是用錯(cuò)了編譯器!!!v8目錄里的v8.lib是個(gè)32位的庫(kù),所以應(yīng)該用“Visual Studio 2008 命令提示”,而我之前用的是“Visual Studio 2008 x64 Win64 命令提示”和“Visual Studio 2008 x64 兼容工具命令提示”。
運(yùn)行“Visual Studio 2008 命令提示”,然后進(jìn)入v8目錄,運(yùn)行cl /Iinclude hello_world.cpp v8.lib
結(jié)果:
| ? 用于 80x86 的 Microsoft (R) 32 位 C/C++ 優(yōu)化編譯器 15.00.30729.01 版版權(quán)所有(C) Microsoft Corporation。保留所有權(quán)利。hello_world.cppMicrosoft (R) Incremental Linker Version 9.00.30729.01Copyright (C) Microsoft Corporation.? All rights reserved./out:hello_world.exehello_world.objv8.libv8.lib(api.obj) : 找到 MSIL .netmodule 或使用 /GL 編譯的模塊;正在使用 /LTCG 重新啟動(dòng)鏈接;將 /LTCG 添加到鏈接命令行以改進(jìn)鏈接器性能Microsoft (R) Incremental Linker Version 9.00.30729.01Copyright (C) Microsoft Corporation.? All rights reserved./out:hello_world.exehello_world.objv8.libv8.lib(platform-win32.obj) : error LNK2001: 無(wú)法解析的外部符號(hào) __imp__accept@12v8.lib(platform-win32.obj) : error LNK2001: 無(wú)法解析的外部符號(hào) __imp__listen@8v8.lib(platform-win32.obj) : error LNK2001: 無(wú)法解析的外部符號(hào) __imp__send@16。。。。。。。。。。。。。。。。。。v8.lib(platform-win32.obj) : error LNK2001: 無(wú)法解析的外部符號(hào) __imp__connect@12hello_world.exe : fatal error LNK1120: 19 個(gè)無(wú)法解析的外部命令 |
錯(cuò)誤的原因是沒(méi)有把"ws2_32.lib"、("WSock32.lib")、"Winmm.lib"加進(jìn)來(lái)。
解決辦法:
在hello_world.cpp里加入
#pragma comment(lib,"ws2_32.lib")#pragma comment(lib,"WSock32.lib")#pragma comment(lib,"Winmm.lib")#include <v8.h>using namespace v8; |
然后運(yùn)行 cl /Iinclude hello_world.cpp v8.lib
用于 80x86 的 Microsoft (R) 32 位 C/C++ 優(yōu)化編譯器 15.00.30729.01 版版權(quán)所有(C) Microsoft Corporation。保留所有權(quán)利。hello_world.cppMicrosoft (R) Incremental Linker Version 9.00.30729.01Copyright (C) Microsoft Corporation.? All rights reserved./out:hello_world.exehello_world.objv8.libv8.lib(api.obj) : 找到 MSIL .netmodule 或使用 /GL 編譯的模塊;正在使用 /LTCG 重新啟動(dòng)鏈接;將 /LTCG 添加到鏈接命令行以改進(jìn)鏈接器性能Microsoft (R) Incremental Linker Version 9.00.30729.01Copyright (C) Microsoft Corporation.? All rights reserved./out:hello_world.exehello_world.objv8.lib正在生成代碼已完成代碼的生成 |
?
這回Ok了 :P
也可以不用改 hello_world.cpp ,直接運(yùn)行??? v8>cl /Iinclude hello_world.cpp v8.lib Winmm.lib WSock32.lib ws2_32.lib
運(yùn)行v8目錄下的 hello_world.exe,輸出:Hello, World!
大功告成 :)
?
?
?
?
?
http://lch361.spaces.live.com/blog/cns!2C632B54B8D9AB49!435.entry
總結(jié)