最新Google V8 引擎编译

V8是谷歌的开源高性能JavaScript和WebAssembly引擎,用c++编写。它在Chrome和Node.js中使用。

本文档的目标读者是那些希望在自己的应用程序中使用V8的c++开发人员,以及对V8的设计和性能感兴趣的人。本文档向您介绍V8,其余的文档向您展示如何在您的代码中使用V8,并描述了它的一些设计细节,同时提供了一组用于度量V8性能的JavaScript基准。

V8实现了ECMAScript和WebAssembly,并运行在Windows 7或更高版本、macOS 10.12+和使用x64、IA-32或ARM处理器的Linux系统上。其他系统(IBM i、AIX)和处理器(MIPS、ppcle64、s390x)由外部维护,参见端口。V8可以独立运行,也可以嵌入到任何c++应用程序中。

V8编译和执行JavaScript源代码,处理对象的内存分配,垃圾收集它不再需要的对象。V8的停止世界,世代,精确的垃圾收集器是V8性能的关键之一。

JavaScript通常用于浏览器中的客户端脚本,例如用于操作文档对象模型(Document Object Model, DOM)对象。然而,DOM通常不是由JavaScript引擎提供的,而是由浏览器提供的。V8 -谷歌Chrome提供DOM也是如此。V8提供了ECMA标准中指定的所有数据类型、操作符、对象和函数。

V8允许任何c++应用程序向JavaScript代码公开自己的对象和函数。由您来决定要向JavaScript公开的对象和函数。

使用Git下载源码

V8的Git库位于https://chromium.googlesource.com/v8/v8.git,

     在GitHub上有一个官方镜像:https://github.com/v8/v8。

使用GN编译源码

    V8是在GN的帮助下构建的。GN是一种元构建系统,因为它为许多其他构建系统生成构建文件。因此,如何构建取决于您使用的“后端”构建系统和编译器。

下面的说明假设您已经签出了V8并且已经安装了构建依赖项。

更多关于GN的信息可以在Chromium的文档或GN自己的文档中找到。

从源代码构建V8涉及三个步骤:

  1. 生成构建文件
  2. 编译
  3. 运行测试
  4. 构建V8有两个工作流程:     
  • 使用名为gm的助手脚本的便利工作流很好地结合了所有三个步骤
  • 原始工作流,您可以在较低级别手动为每个步骤运行单独的命令

Gm是一个方便的一体化脚本,可以生成构建文件、触发构建并可选地运行测试。它可以在V8签出的tools/dev/gm.py中找到。我们建议在你的shell配置中添加一个别名:

alias gm=/path/to/v8/tools/dev/gm.py

然后你可以使用gm为已知的配置构建V8,比如x64.release:

gm x64.release
  • 要在构建之后立即运行测试,请运行:

gm x64.release.check

Gm输出它正在执行的所有命令,以便于在必要时跟踪和重新执行它们。

Gm允许使用单个命令构建所需的二进制文件并运行特定的测试:

     Building 说明地址:Building V8 with GN · V8

      一般成功后就会在build下看到all.sln。即表示生成成功了。

                      打开all.sln  编译生成即可。 个人表示上面没什么特别的难处。

             

                附编译好的lib,Debug和Release。

                下载地址:GoogleV8最新Lib库-C++代码类资源-CSDN下载

             测试代码  V8_test.            

                 最新代码地址(假如你使用的最新的V8,那么测试代码就需要最新)Google 官方 HelloWorld:https://developers.google.com/v8/get_started

              很多人下载的最新的代码,目前百度的很多代码都是旧版的,所以此处会报错。加之对V8类不是很熟悉,不好修改。

             附代码:

// V8_test.cpp : 定义控制台应用程序的入口点。
//
//https://developers.google.com/v8/get_started
#include "stdafx.h"

#include "v8.h"
//#pragma comment(lib,"v8_base.ia32.lib")
//#pragma  comment(lib,"v8_nosnapshot.ia32.lib")
//#pragma comment(lib,"v8_snapshot.lib") 


//v8 need this  使用V8需要链接ws2_32.lib和winmm.lib   
//#pragma comment( lib,"ws2_32.lib" )   
//#pragma comment(lib,"winmm.lib") 

using namespace v8;

//v8::Handle CreateShellContext(v8::Isolate* isolate) {  
// // Create a template for the global object. 
//		return v8::Context::New(isolate);
//}

int _tmain(int argc, _TCHAR* argv[])
{
		 v8::Isolate* isolate = Isolate::GetCurrent();  
		  HandleScope handle_scope(isolate);  
	     
		  Handle context = Context::New(isolate);  
		  Context::Scope context_scope(context);    
  
    // Create a string containing the JavaScript source code.     
    Handle source = String::NewFromUtf8(isolate,"'Hello' + ', World!'");    

    // Compile the source code.     
    Handle
                    
                    

你可能感兴趣的:(C++,google,v8,javascript,google,shell,C++)