zoukankan      html  css  js  c++  java
  • 编译v8引擎

    本机环境是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_partypython_26python build gyp_v8

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

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



    编译之后得到v8_base.ia32.libv8_nosnapshot.ia32.libv8_snapshot.lib


    在这里新建一个工程test_v8



    测试一下使用v8

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

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


    设置一下输出目录(为了匹配刚才生成的几个lib)..uild$(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
    ", *ascii);  
    
    
    	return 0;
    }



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

    ///////////////////////////////下面是引用部分//////////////////////////////////////
    //////出自http://qbaok.blog.163.com/blog/static/101292652012311113126357///////
    第三方 VS 工程中引入 V8 需要注意下面几点:
    1、把上面编译好的lib加入到 "工程/属性/配置属性/连接器/命令行" 的附加依赖项中,如:
    D:projectv8_testv8_projectuildReleaselibv8_base.lib
    D:projectv8_testv8_projectuildReleaselibpreparser_lib.lib
    D:projectv8_testv8_projectuildReleaselibv8_nosnapshot.lib
    D:projectv8_testv8_projectuildReleaselibv8_snapshot.lib
    ws2_32.lib 
    winmm.lib
    依赖中必须存在winmm.lib、ws2_32.lib。
    代码中 #pragma comment(lib,"ws2_32.lib") 等等也可以 ……
    
    2、把v8原码目录中的 include 目录指定到 "工程/属性/配置属性/C++/常规/附加包含目录"中,如: 
    D:projectv8_testv8_projectinclude
    
    此外 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:projectv8_testv8_projectuildReleaselibv8_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:projectv8_testv8_projectinclude
    * 当然,此时你还需要在工程中 #include "v8.h" 
    4、bulid 工程。
    5、编译完成后将 v8_base.dll 放置到 exe 所在目录即可。
    
    当然,你也可以不用隐式调用,使用 LoadLibrary(" v8_base.dll") 在代码动态调用也可以。
    ///////////////////////////////下面是引用部分//////////////////////////////////////

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

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

  • 相关阅读:
    第四节 pandas 数据加载
    第五节 matplotlib库
    第二节 pandas 基础知识
    第一节 anaconda+jupyter+numpy简单使用
    枚举效率测试 --简单计算题
    Tree 树形结构
    django url分发,视图,模板回顾
    django自定义分页器
    转git的使用
    转Git配置SSH,并Push到GitHub上的相关流程
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3157248.html
Copyright © 2011-2022 走看看