概述
http://code.google.com/apis/v8/build.html
http://code.google.com/p/v8/wiki/BuildingOnWindows
环境:64位Windows7、vs2008
1、准备:三个工具Subversion、Python、SCons。
设置环境变量保证在cmd中运行 python --version、scons --version、svn --version 三个命令后能看到相应的版本号。
2、下载v8
svn checkout http://v8.googlecode.com/svn/trunk/ v8
3、编译v8
进入到v8目录,然后运行:
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目录里,这时要运行:
scons –C <v8的路径> env=”….”;
vs2008在64位win7里被分裂开了所以这个命令比32的麻烦。
/v8/obj文件夹里就是生成的文件
4、一个例子hello_world
v8文件夹里建一个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;
}
没想到编译这么简单的一段代码却出了问题,用了一晚上外加一上午的时间搞定了问题。
一开始我是按照网站上说的运行 cl /Iinclude hello_world.cpp v8.lib
结果是:
用于 x64 的 Microsoft (R) C/C++ 优化编译器 15.00.30729.01 版
版权所有(C) Microsoft Corporation。保留所有权利。
hello_world.cpp
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:hello_world.exe
hello_world.obj
v8.lib
hello_world.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl v8::HandleS
cope::~HandleScope(void)" (??1HandleScope@v8@@QEAA@XZ),该符号在函数 main 中被引
用
。。。。。。。。。。。。
hello_world.exe : fatal error LNK1120: 11 个无法解析的外部命令
这个错误的原因是用错了编译器!!!v8目录里的v8.lib是个32位的库,所以应该用“Visual Studio 2008 命令提示”,而我之前用的是“Visual Studio 2008 x64 Win64 命令提示”和“Visual Studio 2008 x64 兼容工具命令提示”。
运行“Visual Studio 2008 命令提示”,然后进入v8目录,运行cl /Iinclude hello_world.cpp v8.lib
结果:
用于 80x86 的 Microsoft (R) 32 位 C/C++ 优化编译器 15.00.30729.01 版
版权所有(C) Microsoft Corporation。保留所有权利。
hello_world.cpp
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:hello_world.exe
hello_world.obj
v8.lib
v8.lib(api.obj) : 找到 MSIL .netmodule 或使用 /GL 编译的模块;正在使用 /LTCG 重
新启动链接;将 /LTCG 添加到链接命令行以改进链接器性能
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:hello_world.exe
hello_world.obj
v8.lib
v8.lib(platform-win32.obj) : error LNK2001: 无法解析的外部符号 __imp__accept@12
v8.lib(platform-win32.obj) : error LNK2001: 无法解析的外部符号 __imp__listen@8
v8.lib(platform-win32.obj) : error LNK2001: 无法解析的外部符号 __imp__send@16
。。。。。。。。。。。。。。。。。。
v8.lib(platform-win32.obj) : error LNK2001: 无法解析的外部符号 __imp__connect@12
hello_world.exe : fatal error LNK1120: 19 个无法解析的外部命令
错误的原因是没有把"ws2_32.lib"、("WSock32.lib")、"Winmm.lib"加进来。
解决办法:
在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;
然后运行 cl /Iinclude hello_world.cpp v8.lib
用于 80x86 的 Microsoft (R) 32 位 C/C++ 优化编译器 15.00.30729.01 版
版权所有(C) Microsoft Corporation。保留所有权利。
hello_world.cpp
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:hello_world.exe
hello_world.obj
v8.lib
v8.lib(api.obj) : 找到 MSIL .netmodule 或使用 /GL 编译的模块;正在使用 /LTCG 重
新启动链接;将 /LTCG 添加到链接命令行以改进链接器性能
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:hello_world.exe
hello_world.obj
v8.lib
正在生成代码
已完成代码的生成
这回Ok了 :P
也可以不用改 hello_world.cpp ,直接运行 v8>cl /Iinclude hello_world.cpp v8.lib Winmm.lib WSock32.lib ws2_32.lib
运行v8目录下的 hello_world.exe,输出:Hello, World!
大功告成 :)
http://lch361.spaces.live.com/blog/cns!2C632B54B8D9AB49!435.entry
最后
以上就是无语跳跳糖为你收集整理的v8编译的全部内容,希望文章能够帮你解决v8编译所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复