我是靠谱客的博主 无语跳跳糖,最近开发中收集的这篇文章主要介绍v8编译,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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编译所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部