天天看点

v8官网svn不能下载github下载地址https://github.com/v8/v81、首先下载V8的源码2、看看google给的build帮助3、假设这里你已经把V8源码检出了4、检出gyp项目代码5、生成vs工程6、打开这个工程,生成一下解决方案

The official mirror of the V8 SVN repository

http://code.google.com/p/v8/

本机环境是win7+vs2010(本来想用2012的,但是发现默认的项目是2010的)

1、首先下载V8的源码

安装好svn,并在cmd下能使用svn help:

svn下载地址(安装包):http://download.csdn.net/detail/zengraoli/5651551

v8官网svn不能下载github下载地址https://github.com/v8/v81、首先下载V8的源码2、看看google给的build帮助3、假设这里你已经把V8源码检出了4、检出gyp项目代码5、生成vs工程6、打开这个工程,生成一下解决方案

使用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

看这里:

v8官网svn不能下载github下载地址https://github.com/v8/v81、首先下载V8的源码2、看看google给的build帮助3、假设这里你已经把V8源码检出了4、检出gyp项目代码5、生成vs工程6、打开这个工程,生成一下解决方案

需要使用gyp来生成项目

http://code.google.com/p/v8/wiki/BuildingWithGYP

v8官网svn不能下载github下载地址https://github.com/v8/v81、首先下载V8的源码2、看看google给的build帮助3、假设这里你已经把V8源码检出了4、检出gyp项目代码5、生成vs工程6、打开这个工程,生成一下解决方案

可以看到是需要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

v8官网svn不能下载github下载地址https://github.com/v8/v81、首先下载V8的源码2、看看google给的build帮助3、假设这里你已经把V8源码检出了4、检出gyp项目代码5、生成vs工程6、打开这个工程,生成一下解决方案

把下载到的python(版本需要2.6的)和cygwin的项目解压到third_party里面

v8官网svn不能下载github下载地址https://github.com/v8/v81、首先下载V8的源码2、看看google给的build帮助3、假设这里你已经把V8源码检出了4、检出gyp项目代码5、生成vs工程6、打开这个工程,生成一下解决方案

4、检出gyp项目代码

svn co http://gyp.googlecode.com/svn/trunk build/gyp

为了方便,等会也上次到csdn中,目录等会更新

gyp下载地址rar:http://download.csdn.net/detail/zengraoli/5650291

将其放在 V8 源码目录/build目录下

v8官网svn不能下载github下载地址https://github.com/v8/v81、首先下载V8的源码2、看看google给的build帮助3、假设这里你已经把V8源码检出了4、检出gyp项目代码5、生成vs工程6、打开这个工程,生成一下解决方案

注意:我这里已经生成项目了,所有会出现all.sln

5、生成vs工程

在v8目录底下执行cmd命令

third_party\python_26\python build\ gyp_v8

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

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

v8官网svn不能下载github下载地址https://github.com/v8/v81、首先下载V8的源码2、看看google给的build帮助3、假设这里你已经把V8源码检出了4、检出gyp项目代码5、生成vs工程6、打开这个工程,生成一下解决方案

编译之后得到v8_base.ia32.lib、v8_nosnapshot.ia32.lib、v8_snapshot.lib

在这里新建一个工程test_v8

v8官网svn不能下载github下载地址https://github.com/v8/v81、首先下载V8的源码2、看看google给的build帮助3、假设这里你已经把V8源码检出了4、检出gyp项目代码5、生成vs工程6、打开这个工程,生成一下解决方案

测试一下使用v8:

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

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

设置一下输出目录(为了匹配刚才生成的几个lib):..\build\$(Configuration)\

设置一下中间目录:$(OutDir)obj\$(ProjectName)\

v8官网svn不能下载github下载地址https://github.com/v8/v81、首先下载V8的源码2、看看google给的build帮助3、假设这里你已经把V8源码检出了4、检出gyp项目代码5、生成vs工程6、打开这个工程,生成一下解决方案

[cpp] view plain copy print ?

  1. // test_v8.cpp : 定义控制台应用程序的入口点。   
  2. //   
  3. #include "stdafx.h"   
  4. #include <iostream>    
  5. #include "../include/v8.h" //根据自己的情况选择好文件位置,或者修改项目头文件路径    
  6. #ifdef _DEBUG    
  7. #pragma comment(lib,"v8_base.ia32.lib")    
  8. #pragma comment(lib,"v8_nosnapshot.ia32.lib")    
  9. #pragma comment(lib,"v8_snapshot.lib")    
  10. #else    
  11. #pragma comment(lib,"v8.lib")    
  12. #endif    
  13. //v8 need this  使用V8需要链接ws2_32.lib和winmm.lib    
  14. #pragma comment( lib,"ws2_32.lib" )    
  15. #pragma comment(lib,"winmm.lib")    
  16. using namespace v8;   
  17. // Creates a new execution environment containing the built-in   
  18. // functions.   
  19. v8::Handle<v8::Context> CreateShellContext(v8::Isolate* isolate) {  
  20.     // Create a template for the global object.   
  21.     return v8::Context::New(isolate);  
  22. }  
  23. int _tmain(int argc, _TCHAR* argv[])  
  24. {  
  25.     HandleScope handle_scope;  
  26.     v8::Isolate* isolate = v8::Isolate::GetCurrent();  
  27.     Handle<v8::Context> context = CreateShellContext(isolate);  
  28.     Context::Scope context_scope(context);    
  29.     // Create a string containing the JavaScript source code.      
  30.     Handle<String> source = String::New("'Hello' + ', World!'");    
  31.     // Compile the source code.      
  32.     Handle<Script> script = Script::Compile(source);    
  33.     context->Enter();  
  34.     // Run the script to get the result.      
  35.     Handle<Value> result = script->Run();    
  36.     // Dispose the persistent context.      
  37.     context->Exit();  
  38.     // Convert the result to an ASCII string and print it.      
  39.     String::AsciiValue ascii(result);    
  40.     printf("%s\n", *ascii);    
  41.     return 0;  
  42. }  
// 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官网svn不能下载github下载地址https://github.com/v8/v81、首先下载V8的源码2、看看google给的build帮助3、假设这里你已经把V8源码检出了4、检出gyp项目代码5、生成vs工程6、打开这个工程,生成一下解决方案

可以在这里使用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. 2、把v8原码目录中的 include 目录指定到 "工程/属性/配置属性/C++/常规/附加包含目录"中,如:   
  14. D:\project\v8_test\v8_project\include  
  15. 此外 http://code.google.com/apis/v8/get_started.html  里面有 hello world 实例可用来测试是否引入成功。  
  16. V8 dll 化编译要点:  
  17. 1、单独生成 v8_nosnapshot 为 v8_nosnapshot.lib 因为 v8_base 依赖 v8_nosnapshot.lib 。  
  18. 2、修改 v8_base 属性 "工程/属性/配置属性/常规/配置类型" 为 动态库.dll  
  19. 3、在 v8_base 属性 "工程/属性/配置属性/C++/预处理器/预处理定义" 内添加 "BUILDING_V8_SHARED" 定义项  
  20. 4、在 v8_base 属性 "工程/属性/配置属性/连接器/命令行" 的附加依赖项中加入:  
  21. D:\project\v8_test\v8_project\build\Release\lib\v8_nosnapshot.lib  
  22. ws2_32.lib   
  23. winmm.lib  
  24. 5、生成  v8_base 。  
  25. V8 dll 的使用:  
  26. 生成的 v8_base  动态链接库项目中存在两个文件 :  
  27. v8_base.lib  
  28. v8_base.dll  
  29. 其中 v8_base.lib 是在 VS 工程中隐式调用 v8_base.dll  使用的,工程编译后可不需要。  
  30. 隐式调用 v8_base.dll 方法为:  
  31. 1、将以上两个文件放置到你的工程文件夹中。  
  32. 2、在 v8_base 属性 "工程/属性/配置属性/连接器/命令行" 的附加依赖项中加入 v8_base.lib 。  
  33. 3、把v8原码目录中的 include 目录指定到 "工程/属性/配置属性/C++/常规/附加包含目录"中,如:   
  34. D:\project\v8_test\v8_project\include  
  35. * 当然,此时你还需要在工程中 #include "v8.h"   
  36. 4、bulid 工程。  
  37. 5、编译完成后将 v8_base.dll 放置到 exe 所在目录即可。  
  38. 当然,你也可以不用隐式调用,使用 LoadLibrary(" v8_base.dll") 在代码动态调用也可以。  
  39. ///下面是引用部分//  
///下面是引用部分//
//出自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是私有不能访问

v8