编译v8引擎

2024-04-01 16:38
文章标签 编译 引擎 v8

本文主要是介绍编译v8引擎,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文摘自:http://blog.csdn.net/zengraoli/article/details/9178219

本机环境是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)\




[cpp]  view plain copy print ?
  1. // test_v8.cpp : 定义控制台应用程序的入口点。  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include <iostream>   
  6. #include "../include/v8.h" //根据自己的情况选择好文件位置,或者修改项目头文件路径   
  7.   
  8.   
  9. #ifdef _DEBUG   
  10. #pragma comment(lib,"v8_base.ia32.lib")   
  11. #pragma comment(lib,"v8_nosnapshot.ia32.lib")   
  12. #pragma comment(lib,"v8_snapshot.lib")   
  13. #else   
  14. #pragma comment(lib,"v8.lib")   
  15. #endif   
  16.   
  17.   
  18. //v8 need this  使用V8需要链接ws2_32.lib和winmm.lib   
  19. #pragma comment( lib,"ws2_32.lib" )   
  20. #pragma comment(lib,"winmm.lib")   
  21.   
  22.   
  23. using namespace v8;   
  24.   
  25. // Creates a new execution environment containing the built-in  
  26. // functions.  
  27. v8::Handle<v8::Context> CreateShellContext(v8::Isolate* isolate) {  
  28.     // Create a template for the global object.  
  29.     return v8::Context::New(isolate);  
  30. }  
  31.   
  32.   
  33. int _tmain(int argc, _TCHAR* argv[])  
  34. {  
  35.     HandleScope handle_scope;  
  36.   
  37.     v8::Isolate* isolate = v8::Isolate::GetCurrent();  
  38.     Handle<v8::Context> context = CreateShellContext(isolate);  
  39.     Context::Scope context_scope(context);    
  40.   
  41.     // Create a string containing the JavaScript source code.     
  42.     Handle<String> source = String::New("'Hello' + ', World!'");    
  43.   
  44.     // Compile the source code.     
  45.     Handle<Script> script = Script::Compile(source);    
  46.   
  47.     context->Enter();  
  48.   
  49.     // Run the script to get the result.     
  50.     Handle<Value> result = script->Run();    
  51.   
  52.     // Dispose the persistent context.     
  53.     context->Exit();  
  54.   
  55.     // Convert the result to an ASCII string and print it.     
  56.     String::AsciiValue ascii(result);    
  57.     printf("%s\n", *ascii);    
  58.   
  59.   
  60.     return 0;  
  61. }  



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


[plain]  view plain copy print ?
  1. ///下面是引用部分//  
  2. //出自http://qbaok.blog.163.com/blog/static/101292652012311113126357///  
  3. 第三方 VS 工程中引入 V8 需要注意下面几点:  
  4. 1、把上面编译好的lib加入到 "工程/属性/配置属性/连接器/命令行" 的附加依赖项中,如:  
  5. D:\project\v8_test\v8_project\build\Release\lib\v8_base.lib  
  6. D:\project\v8_test\v8_project\build\Release\lib\preparser_lib.lib  
  7. D:\project\v8_test\v8_project\build\Release\lib\v8_nosnapshot.lib  
  8. D:\project\v8_test\v8_project\build\Release\lib\v8_snapshot.lib  
  9. ws2_32.lib   
  10. winmm.lib  
  11. 依赖中必须存在winmm.lib、ws2_32.lib。  
  12. 代码中 #pragma comment(lib,"ws2_32.lib") 等等也可以 ……  
  13.   
  14. 2、把v8原码目录中的 include 目录指定到 "工程/属性/配置属性/C++/常规/附加包含目录"中,如:   
  15. D:\project\v8_test\v8_project\include  
  16.   
  17. 此外 http://code.google.com/apis/v8/get_started.html  里面有 hello world 实例可用来测试是否引入成功。  
  18.   
  19. V8 dll 化编译要点:  
  20. 1、单独生成 v8_nosnapshot 为 v8_nosnapshot.lib 因为 v8_base 依赖 v8_nosnapshot.lib 。  
  21. 2、修改 v8_base 属性 "工程/属性/配置属性/常规/配置类型" 为 动态库.dll  
  22. 3、在 v8_base 属性 "工程/属性/配置属性/C++/预处理器/预处理定义" 内添加 "BUILDING_V8_SHARED" 定义项  
  23. 4、在 v8_base 属性 "工程/属性/配置属性/连接器/命令行" 的附加依赖项中加入:  
  24. D:\project\v8_test\v8_project\build\Release\lib\v8_nosnapshot.lib  
  25. ws2_32.lib   
  26. winmm.lib  
  27. 5、生成  v8_base 。  
  28.   
  29. V8 dll 的使用:  
  30. 生成的 v8_base  动态链接库项目中存在两个文件 :  
  31. v8_base.lib  
  32. v8_base.dll  
  33. 其中 v8_base.lib 是在 VS 工程中隐式调用 v8_base.dll  使用的,工程编译后可不需要。  
  34. 隐式调用 v8_base.dll 方法为:  
  35. 1、将以上两个文件放置到你的工程文件夹中。  
  36. 2、在 v8_base 属性 "工程/属性/配置属性/连接器/命令行" 的附加依赖项中加入 v8_base.lib 。  
  37. 3、把v8原码目录中的 include 目录指定到 "工程/属性/配置属性/C++/常规/附加包含目录"中,如:   
  38. D:\project\v8_test\v8_project\include  
  39. * 当然,此时你还需要在工程中 #include "v8.h"   
  40. 4、bulid 工程。  
  41. 5、编译完成后将 v8_base.dll 放置到 exe 所在目录即可。  
  42.   
  43. 当然,你也可以不用隐式调用,使用 LoadLibrary(" v8_base.dll") 在代码动态调用也可以。  
  44. ///下面是引用部分//  

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

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


这篇关于编译v8引擎的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/867637

相关文章

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

Windows环境利用VS2022编译 libvpx 源码教程

libvpx libvpx 是一个开源的视频编码库,由 WebM 项目开发和维护,专门用于 VP8 和 VP9 视频编码格式的编解码处理。它支持高质量的视频压缩,广泛应用于视频会议、在线教育、视频直播服务等多种场景中。libvpx 的特点包括跨平台兼容性、硬件加速支持以及灵活的接口设计,使其可以轻松集成到各种应用程序中。 libvpx 的安装和配置过程相对简单,用户可以从官方网站下载源代码

Smarty模板引擎工作机制(一)

深入浅出Smarty模板引擎工作机制,我们将对比使用smarty模板引擎和没使用smarty模板引擎的两种开发方式的区别,并动手开发一个自己的模板引擎,以便加深对smarty模板引擎工作机制的理解。 在没有使用Smarty模板引擎的情况下,我们都是将PHP程序和网页模板合在一起编辑的,好比下面的源代码: <?php$title="深处浅出之Smarty模板引擎工作机制";$content=

Golang test编译使用

创建文件my_test.go package testsimport "testing"func TestMy(t *testing.T) {t.Log("TestMy")} 通常用法: $ go test -v -run TestMy my_test.go=== RUN TestMyTestMy: my_test.go:6: TestMy--- PASS: TestMy (0.

C++/《C/C++程序编译流程》

程序的基本流程如图:   1.预处理        预处理相当于根据预处理指令组装新的C/C++程序。经过预处理,会产生一个没有宏定义,没有条件编译指令,没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内容上有所不同。 读取C/C++源程序,对其中的伪指令(以#开头的指令)进行处理将所有的“#define”删除,并且展开所有的宏定义处理所有的条件编译指令,如:“#if”、“

编译linux内核出现 arm-eabi-gcc: error: : No such file or directory

external/e2fsprogs/lib/ext2fs/tdb.c:673:29: warning: comparison between : In function 'max2165_set_params': -。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。 。。。。。。。。 host asm: libdvm <= dalvik/vm/mterp/out/Inte

MySQL技术内幕_innodb存储引擎

MySQL技术内幕_innodb存储引擎 INNODB innodb中如果表没有主键 表是否由 非空唯一键,有则该字段为主键没有,则自动创建一个6字节大小的指针 innodb存储引擎的所有数据都存储在表空间中,表空间由段,区,页(块)组成。 如果启用了 innodb_file_per_table, 则每张表内的数据可以单独放在一个表空间中即使启用了上面参数,共享表空间也会因为 系统事务信息

QT 编译报错:C3861: ‘tr‘ identifier not found

问题: QT 编译报错:C3861: ‘tr’ identifier not found 原因 使用tr的地方所在的类没有继承自 QObject 类 或者在不在某一类中, 解决方案 就直接用类名引用 :QObject::tr( )

Matter.js:Web开发者的2D物理引擎

Matter.js:Web开发者的2D物理引擎 前言 在现代网页开发中,交互性和动态效果是提升用户体验的关键因素。 Matter.js,一个专为网页设计的2D物理引擎,为开发者提供了一种简单而强大的方式,来实现复杂的物理交互效果。 无论是模拟重力、碰撞还是复杂的物体运动,Matter.js 都能轻松应对。 本文将带你深入了解 Matter.js ,并提供实际的代码示例,让你一窥其强大功能