本机环境是win7+vs2010(本来想用2012的,但是发现默认的项目是2010的)

1、首先下载V8的源码

安装好svn,并在cmd下能使用svn help:

svn下载地址(安装包):http://download.csdn.net/detail/zengraoli/5651551

使用svn检出命令,check out V8项目:

svn checkout http://v8.googlecode.com/svn/trunk/  v8 
(末尾的V8为保存目录的相对地址,可以先cd到合适的位置运行svn)

2、看看google给的build帮助

https://developers.google.com/v8/build

看这里:

需要使用gyp来生成项目

http://code.google.com/p/v8/wiki/BuildingWithGYP

可以看到是需要python(版本需要2.6的)和cygwin的

这两个东西不好导出,我等会上传到csdn中,上传之后再更新这个地方

python下载地址rar:http://download.csdn.net/detail/zengraoli/5651319

cygwin下载地址rar:http://download.csdn.net/detail/zengraoli/5651299

当然你可以试试下面的方法检出(经常会失败或者不完全,你可以试试):

svn co http://src.chromium.org/svn/trunk/deps/third_party/cygwin

svn co http://src.chromium.org/svn/trunk/tools/third_party/python_26

3、假设这里你已经把V8源码检出了

在在 V8 源码目录下建立 third_party

把下载到的python(版本需要2.6的)和cygwin的项目解压到third_party里面

4、检出gyp项目代码

svn co http://gyp.googlecode.com/svn/trunk build/gyp

为了方便,等会也上次到csdn中,目录等会更新

gyp下载地址rar:http://download.csdn.net/detail/zengraoli/5650291

将其放在 V8 源码目录/build目录下

注意:我这里已经生成项目了,所有会出现all.sln

5、生成vs工程

在v8目录底下执行cmd命令

third_party\python_26\python build\ gyp_v8

执行完毕你就可以看到gyp_v8同一级目录中出现All.vcxproj了

6、打开这个工程,生成一下解决方案



编译之后得到v8_base.ia32.lib、v8_nosnapshot.ia32.lib、v8_snapshot.lib

在这里新建一个工程test_v8

测试一下使用v8:

测试项目的下载地址(包含需要到的lib):

http://download.csdn.net/detail/zengraoli/5651447

设置一下输出目录(为了匹配刚才生成的几个lib):..\build\$(Configuration)\

设置一下中间目录:$(OutDir)obj\$(ProjectName)\

// test_v8.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
#include "../include/v8.h" //根据自己的情况选择好文件位置,或者修改项目头文件路径 #ifdef _DEBUG
#pragma comment(lib,"v8_base.ia32.lib")
#pragma comment(lib,"v8_nosnapshot.ia32.lib")
#pragma comment(lib,"v8_snapshot.lib")
#else
#pragma comment(lib,"v8.lib")
#endif //v8 need this 使用V8需要链接ws2_32.lib和winmm.lib
#pragma comment( lib,"ws2_32.lib" )
#pragma comment(lib,"winmm.lib") using namespace v8; // Creates a new execution environment containing the built-in
// functions.
v8::Handle<v8::Context> CreateShellContext(v8::Isolate* isolate) {
// Create a template for the global object.
return v8::Context::New(isolate);
} int _tmain(int argc, _TCHAR* argv[])
{
HandleScope handle_scope; v8::Isolate* isolate = v8::Isolate::GetCurrent();
Handle<v8::Context> context = CreateShellContext(isolate);
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); context->Enter(); // Run the script to get the result.
Handle<Value> result = script->Run(); // Dispose the persistent context.
context->Exit(); // Convert the result to an ASCII string and print it.
String::AsciiValue ascii(result);
printf("%s\n", *ascii); return 0;
}

可以在这里使用v8,或者项目联调也是可以的

///////////////////////////////下面是引用部分//////////////////////////////////////
//////出自http://qbaok.blog.163.com/blog/static/101292652012311113126357///////
第三方 VS 工程中引入 V8 需要注意下面几点:
1、把上面编译好的lib加入到 "工程/属性/配置属性/连接器/命令行" 的附加依赖项中,如:
D:\project\v8_test\v8_project\build\Release\lib\v8_base.lib
D:\project\v8_test\v8_project\build\Release\lib\preparser_lib.lib
D:\project\v8_test\v8_project\build\Release\lib\v8_nosnapshot.lib
D:\project\v8_test\v8_project\build\Release\lib\v8_snapshot.lib
ws2_32.lib 
winmm.lib
依赖中必须存在winmm.lib、ws2_32.lib。
代码中 #pragma comment(lib,"ws2_32.lib") 等等也可以 …… 2、把v8原码目录中的 include 目录指定到 "工程/属性/配置属性/C++/常规/附加包含目录"中,如: 
D:\project\v8_test\v8_project\include 此外 http://code.google.com/apis/v8/get_started.html  里面有 hello world 实例可用来测试是否引入成功。 V8 dll 化编译要点:
1、单独生成 v8_nosnapshot 为 v8_nosnapshot.lib 因为 v8_base 依赖 v8_nosnapshot.lib 。
2、修改 v8_base 属性 "工程/属性/配置属性/常规/配置类型" 为 动态库.dll
3、在 v8_base 属性 "工程/属性/配置属性/C++/预处理器/预处理定义" 内添加 "BUILDING_V8_SHARED" 定义项
4、在 v8_base 属性 "工程/属性/配置属性/连接器/命令行" 的附加依赖项中加入:
D:\project\v8_test\v8_project\build\Release\lib\v8_nosnapshot.lib
ws2_32.lib 
winmm.lib
5、生成  v8_base 。 V8 dll 的使用:
生成的 v8_base  动态链接库项目中存在两个文件 :
v8_base.lib
v8_base.dll
其中 v8_base.lib 是在 VS 工程中隐式调用 v8_base.dll  使用的,工程编译后可不需要。
隐式调用 v8_base.dll 方法为:
1、将以上两个文件放置到你的工程文件夹中。
2、在 v8_base 属性 "工程/属性/配置属性/连接器/命令行" 的附加依赖项中加入 v8_base.lib 。
3、把v8原码目录中的 include 目录指定到 "工程/属性/配置属性/C++/常规/附加包含目录"中,如: 
D:\project\v8_test\v8_project\include
* 当然,此时你还需要在工程中 #include "v8.h" 
4、bulid 工程。
5、编译完成后将 v8_base.dll 放置到 exe 所在目录即可。 当然,你也可以不用隐式调用,使用 LoadLibrary(" v8_base.dll") 在代码动态调用也可以。
///////////////////////////////下面是引用部分//////////////////////////////////////

注:文章部分也来自http://my.oschina.net/myemptybottle/blog/42700

但是里面的demo在最新版中是编译不通过的,提示Context是私有不能访问

编译v8引擎的更多相关文章

  1. 【待解决】编译V8引擎出错-snapshot.cc

    这几天学习nodejs,翻阅官网的API文档.看到nodejs插件时,想了解一下v8的实现机制,于是我便从GitHub社区克隆了一份v8源码库.哪知道,编译安装的时候就出了问题,这问题已经折磨我两天了 ...

  2. [翻译] V8引擎的解析

    原文:Parsing in V8 explained 本文档介绍了 V8 引擎是如何解析 JavaScript 源代码的,以及我们将改进它的计划. 动机 我们有个解析器和一个更快的预解析器(~2x), ...

  3. (译)V8引擎介绍

    V8是什么? V8是谷歌在德国研发中心开发的一个JavaScript引擎.开源并且用C++实现.可以用于运行于客户端和服务端的Javascript程序. V8设计的初衷是为了提高浏览器上JavaScr ...

  4. V8引擎嵌入指南

    如果已读过V8编程入门那你已经熟悉了如句柄(handle).作用域(scope)和上下文(context)之类的关键概念,以及如何将V8引擎作为一个独立的虚拟机来使用.本文将进一步讨论这些概念,并介绍 ...

  5. 精读《V8 引擎 Lazy Parsing》

    1. 引言 本周精读的文章是 V8 引擎 Lazy Parsing,看看 V8 引擎为了优化性能,做了怎样的尝试吧! 这篇文章介绍的优化技术叫 preparser,是通过跳过不必要函数编译的方式优化性 ...

  6. 深入出不来nodejs源码-V8引擎初探

    原本打算是把node源码看得差不多了再去深入V8的,但是这两者基本上没办法分开讲. 与express是基于node的封装不同,node是基于V8的一个应用,源码内容已经渗透到V8层面,因此这章简述一下 ...

  7. Javascript的V8引擎研究

    1.针对上下文的Snapshot技术 什么是上下文(Contexts)?实际是JS应用程序的运行环境,避免应用程序的修改相互影响,例如一个页面js修改内置对象方法toString,不应该影响到另外页面 ...

  8. Google V8 引擎 原理详解

    V8 引擎概览 V8 引擎简介 Google V8 引擎使用 C++ 代码编写,实现了 ECMAScript 规范的第五版,可以运行在所有的主流 操作系统中,甚至可以运行在移动终端 ( 基于 ARM ...

  9. Nodejs V8引擎 fast property lookup

    前言 之所以会研究这个东西,是我在网上找了一下各个语言的执行效率比较.好吧,我承认这是个无聊的东西,不过看看总是无妨,然而我惊讶的发现,有些测试声称Java,C,Nodejs是处在同一个效率级别参见链 ...

随机推荐

  1. 基于visual Studio2013解决C语言竞赛题之1092链表转换

        题目 解决代码及点评 /************************************************************************/ /* ...

  2. android用shape画虚线,怎么也不显示

     一直以为android的shape能画直线.虚线.矩形,圆形等.画直线也就算了.用一个view设一下高度和颜色,就能够出来一条直线了.所以说这个对我来说常常不用,圆形是能够,看看我应用里的消息提 ...

  3. Java自注三进入

    由于近期学的内容实际操作比較多,所以新的笔记就用代码为主体吧! 本回主要内容是输入,Java中主要用Scanner类和BufferedReader.整体来说不难,但有些细节能够总结,看代码: impo ...

  4. IdHttpServer实现webservice(130篇DataSnap文章)

    IdHttpServer实现webservice   朋友有个项目,通信协议使用HTTP,数据序列使用BIN(二进制).他不知道要选用何种技术方案. REST webservice是http+json ...

  5. Linux版EPUB阅读器

    Linux版EPUB阅读器 如果说用平板电脑看书尚属主流的话,那么在电脑上读书就非常少见了.专注阅读16世纪的书是非常困难的了,没人希望后台蹦出QQ聊天窗口.但是如果你非要在电脑上打开电子书的话,那么 ...

  6. uva 816 BFS求最短路的经典问题……

    一开始情况没有考虑周全,直接WA掉了, 然后用fgets()出现了WA,给改成scanf就AC了 题目不是很难,用心就好…… #include <iostream> #include &l ...

  7. 第十六周oj刷题——Problem J: 填空题:静态成员---计算学生个数

    Description 学生类声明已经给出.在主程序中依据输入信息输出实际建立的学生对象个数,以及全部学生对象的成绩总和. Input 学生个数 相应学生个数的学生信息(姓名    年龄    成绩) ...

  8. mysql5.6 主从配置

    参考网址:http://www.cnblogs.com/zhoujie/p/mysql1.html http://kerry.blog.51cto.com/172631/277414/ 1.配置主库: ...

  9. 与众不同 windows phone (2) - Control(控件)

    原文:与众不同 windows phone (2) - Control(控件) [索引页][源码下载] 与众不同 windows phone (2) - Control(控件) 作者:webabcd介 ...

  10. Android studio导入Eclipse项目,和一些错误的解决

    Android studio导入Eclipse开发的项目步骤如下 如果已经打开Android studio的话就选择你已打开的项目,关闭然后导入 开始导入 导入完成. 2.项目出错 Error:(13 ...