编译v8引擎
来源:互联网 发布:无标度网络应用 编辑:程序博客网 时间:2024/04/19 23:20
本机环境是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.libD:\project\v8_test\v8_project\build\Release\lib\preparser_lib.libD:\project\v8_test\v8_project\build\Release\lib\v8_nosnapshot.libD:\project\v8_test\v8_project\build\Release\lib\v8_snapshot.libws2_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 属性 "工程/属性/配置属性/常规/配置类型" 为 动态库.dll3、在 v8_base 属性 "工程/属性/配置属性/C++/预处理器/预处理定义" 内添加 "BUILDING_V8_SHARED" 定义项4、在 v8_base 属性 "工程/属性/配置属性/连接器/命令行" 的附加依赖项中加入:D:\project\v8_test\v8_project\build\Release\lib\v8_nosnapshot.libws2_32.lib winmm.lib5、生成 v8_base 。V8 dll 的使用:生成的 v8_base 动态链接库项目中存在两个文件 :v8_base.libv8_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引擎
- 编译v8引擎
- 编译v8引擎
- goole v8引擎编译集成
- vs2012编译v8 javascript 引擎
- 最新Google V8 引擎编译
- 最新Google V8 引擎编译
- VS2015编译google V8引擎
- windows下编译google v8引擎
- VS2010 编译 google V8 引擎 为 dll
- google V8 javascript引擎编译测试
- V8 引擎编译 测试 64位+VS2012
- 在Windows上编译V8 javascript引擎
- Mac OS下V8引擎编译方法
- V8 引擎编译 测试 64位+VS2012
- v8引擎
- Ubuntu Linux 下 Google Chrome V8引擎的编译实战
- 在windows下编译v8引擎-with visual studio 2010
- android apk签名(为什么 如何做 验证)
- 关于ListView (2)——SimpleAdapter源码解析与ViewBinders的用法
- 关于ListView (1)——异步加载图片
- 使用URL和URLConnection(多线程下载)
- 使用urlconnection和json发送post请求到服务器
- 编译v8引擎
- Android AsyncTask
- Java设计模式之单例模式(singleton模式)
- python DES加密
- Android选项卡(TabWidget)例子
- Java的运算符号(逻辑与、或、非、移位运算)
- 二种方法实现 Android TabWidget
- C++编程范式
- android界面xml文件中导入另一个xml文件的方法include