编译v8引擎

article/2025/11/10 6:59:57

本机环境是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.libv8_nosnapshot.ia32.libv8_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是私有不能访问



http://chatgpt.dhexx.cn/article/PVaoRZbl.shtml

相关文章

JavaScript引擎—V8引擎

为什么需要Javascript引擎&#xff1f; 随着JS承担的工作越来越多&#xff0c;早就已超越创造出的初衷&#xff08;表单验证&#xff09;的范畴&#xff0c;因此需要快速的解析和执行JavaScript脚本 V8引擎由此而生 JavaScript引擎主要功能&#xff1a;结合JS语言特性 和 本质 …

LVGL V8

本文适用于LVGL V8版本 LVGL simulator vs2019 官方工程 lv_sim_visual_studio 使用注意事项&#xff1a; 1、将官方工程从github上下载下来&#xff0c;最好使用git 将整个工程clone下来&#xff0c;因为工程内部有依赖&#xff0c;如果只是将工程Download下来&#xff0c;无…

为什么V8引擎这么快?

转载请注明出处:http://blog.csdn.net/horkychen Google研发的V8 JavaScript引擎性能优异。我们请熟悉内部程序实现的作者依源代码来看看V8是如何加速的。 作者&#xff1a;Community Engine公司研发部研发工程师Hajime Morita Google的Chrome中的V8 JavaScript引擎&#xff0…

垃圾回收机制之v8引擎

v8的内存分配 &#xff08;栈&#xff08;执行环境&#xff09;跟堆&#xff09; 堆内存负责垃圾回收机制&#xff0c;只有新生代和老生代两部分 新生代&#xff1a;对等分的&#xff08;严格&#xff09; 老生代&#xff1a; 都是由新生代转变的&#xff08;连续的空间&…

V8 JavaScript引擎

简介 V8 (v8.dev)是 Google 的开源高性能 JavaScript 和 WebAssembly 引擎&#xff0c;用 C 编写。它用于 Chrome 和 Node.js 等。它实现了 ECMAScript 和 WebAssembly&#xff0c;并运行在 Windows 7 或更高版本、macOS 10.12 以及使用 x64、IA-32、ARM 或 MIPS 处理器的 Lin…

V8、JSCore、Hermes、QuickJS,hybrid开发JS引擎怎么选

&#x1f4cc; 如果你喜欢我写的文章&#xff0c;可以把我的公众号设为星标 &#x1f31f;&#xff0c;这样每次有更新就可以及时推送给你啦 在一般的移动端开发场景中&#xff0c;每次更新应用功能都是通过 Native 语言开发并通过应用市场版本分发来实现的。 但是市场瞬息万变…

v8引擎详解

前言 JavaScript绝对是最火的编程语言之一&#xff0c;一直具有很大的用户群&#xff0c;随着在服务端的使用&#xff08;NodeJs&#xff09;&#xff0c;更是爆发了极强的生命力。编程语言分为编译型语言和解释型语言两类&#xff0c;编译型语言在执行之前要先进行完全编译&am…

Chrome V8引擎介绍

随着Web相关技术的发展&#xff0c;JavaScript所要承担的工作也越来越多&#xff0c;早就超越了“表单验证”的范畴&#xff0c;这就更需要快速的解析和执行JavaScript脚本。V8引擎就是为解决这一问题而生&#xff0c;在node中也是采用该引擎来解析JavaScript。V8是如何使得Jav…

V8引擎原理

V8引擎原理 V8是用C编写的Googl开源高性能JavaScript和WebAssembly引擎&#xff0c;它也用于Chrome和Node.js等 V8的解析js的流程 js直接放到cpu中无法执行&#xff0c;需要通过v8转换js先被转换成ast语法树&#xff0c;在此期间主要是进行词法分析和语法分析ast语法树通过…

聊聊V8引擎

V8 是什么 V8 是 Google 开源的 JavaScript 引擎。可以理解为&#xff1a;V8 将程序员写的代码&#xff0c;最终解析成机器码能够让计算机识别。其中的具体操作&#xff0c;就是 V8 干的事。我们把 V8 看成一个黑盒&#xff0c; 程序语言进去&#xff0c;通过黑盒子的处理&…

GNSS测量与数据处理第六周作业

1.简述GPS载波相位测量的基本原理 答&#xff1a;若卫星S发出一载波信号&#xff0c;该信号向各处传播。设某一瞬间&#xff0c;该信号在接收机R处的相位为φR&#xff0c;在卫星S处的相位为φS&#xff0c;φR、φS为从某一起点开始计算的包括整周数在内的载波相位&#xff0c…

三角测量计算三维坐标的代码_室内定位系统的三边测量与三角测量

三边测量依赖于信号强度作为距离的类比。三角测量依赖于标签信号接收的时间差。 室内资产跟踪非常流行。但是&#xff0c;当谈到整个室内资产跟踪时&#xff0c;请务必记住&#xff0c;它是由一组松散编织的技术组成的&#xff0c;每种技术都可以使用以下两种方法之一来计算位置…

MATLAB实现三边定位

MATLAB实现 trilateration_position.m % ----------------采用三边定位法对未知节点定位-------------------------------%{clc命令是用来清除命令窗口的内容。不管开启多少个应用程序,命令窗口只有一个,所以clc无论是在脚本m文件或者函数m文件调用时,clc命令都会清除命令…

基于圆展开自适应三边测量算法的室内定位

基于圆展开自适应三边测量算法的室内定位 具有无线通信功能的移动设备的日益普及刺激了室内定位服务的增长。室内定位用于实时定位设备位置&#xff0c;方便访问。然而&#xff0c;由于大量障碍物&#xff0c;与室外定位相比&#xff0c;室内定位具有挑战性。全球定位系统非常适…

计算节点位置的基本方法

计算节点位置的基本方法 在传感器节点定位过程中&#xff0c;通常根据未知节点&#xff08;被监测节点&#xff09;相对相邻信标节点的距离、角度进行计算位置。通常采用三边测距法、三角测距法或极大似然估计法进行计算。 三边测距法(Trilateration) 三边测距法的原理如下&…

定位算法——多边测量法及MATLAB编程

文章目录 三边测距定位算法简介多边测量法公式推导三边测距定位算法MATLAB程序 三边测距定位算法简介 三边测量法是多边测量法的低级应用&#xff0c;即已知三个点的横纵坐标和与未知点的距离 d d d&#xff0c;如下图所示&#xff1a;  如图所示已知 ( x 1 , y 1 ) (x_1,y_1…

UWB 三边测量定位原理及最小二乘法和三角形质心法的应用—通俗解析

UWB 三边测量定位原理及最小二乘法和三角形质心法的应用—通俗解析 本人二线城市小程序员一枚,这段时间因为公司的原因,开始研究UWB,定位原理部分花了三整天看CSDN上的各种文章,零零散散,大多是讲的某一部分的原理,没有能给串联起来的。 把学习过程中一些心得分享给大家…

【UWB 定位】室内定位 三边定位算法

最近在整UWB室内定位&#xff0c;看到一些简单的测距数据解算算法&#xff0c;记录一下。 测 在基于测距的定位算法中&#xff0c;三边测量法是比较简单的算法&#xff0c;算法原理为&#xff1a;平面上有三个不共线的基站 A,B,C&#xff0c;和一个未知终端 D&#xff0c;并已…

Trilateration三边测量定位算法

Trilateration&#xff08;三边测量&#xff09;是一种常用的定位算法&#xff1a; 已知三点位置 (x1, y1), (x2, y2), (x3, y3)已知未知点 (x0, y0) 到三点距离 d1, d2, d3 以 d1, d2, d3 为半径作三个圆&#xff0c;根据毕达哥拉斯定理&#xff0c;得出交点即未知点的位置计…

python实现简单的三边测量定位

定位原理很简单&#xff0c;故不赘述&#xff0c;直接上源码&#xff0c;内附注释。&#xff08;如果对您的学习有所帮助&#xff0c;还请帮忙点个赞&#xff0c;谢谢了&#xff09; #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Wed May 1…