未加星标

ChakraCore学习笔记(一) ―― 在Windows上编译ChakraCore

字体大小 | |
[系统(windows) 所属分类 系统(windows) | 发布者 店小二04 | 时间 2017 | 作者 红领巾 ] 0人收藏点击收藏

原创文章,转载请标明出处: Soul Orbit

本文链接地址: ChakraCore学习笔记(一) ―― 在windows上编译ChakraCore

Chakra是Edge浏览器中的javascript引擎,在2016年6月份,我看到Edge的博客说, Chakra的benchmark已经超越了Chrome v8 ,而且看数据还不是一点半点,这件事情让我又惊讶又激动,因为这确实不容易啊,所以当时就非常好奇Chakra是怎么实现的,可是一直都抽不出时间来好好读读代码,直到现在。正好博客也已经搬迁完毕了,所以在一边阅读的过程中,正好一边写一点东西,做个笔记吧。

1. ChakraCore

16年年初, Chakra的源代码被开源放在了github上 ,项目名叫ChakraCore: https://github.com/Microsoft/ChakraCore

随着时间的发展,现在ChakraCore已经可以在Windows,linux和Mac上编译和运行。这个我觉得是很有意义的,因为这使得Chakra不是仅仅为了Edge而存在,而是能更好的和整个社区一起发展,比如,现在 ChakraCore已经能够支持nodejs ,当然我们也可以用它来做别的事情,比如做游戏的脚本引擎等等。

2. 准备工作

在编译ChakraCore之前,我们要确认我们已经安装了如下环境:

Windows 7 SP1或更高版本, Windows Server 2008 R2或更高版本 Visual Studio 2013或者2015

另外如果想编译arm版本,则必须使用Visual Studio 2015加上Windows 10 SDK。

3. 下载并编译ChakraCore

首先我们需要下载ChakraCore的源代码,在你的代码目录下运行如下命令即可,比如我的代码目录是d:\Code:

cd d:\Code git clone https://github.com/Microsoft/ChakraCore.git

ChakraCore在Windows上的编译异常简单,只需要用Visual Studio打开Build\Chakra.Core.sln,然后编译整个项目就行。如果你更喜欢在命令行下编译那么可以在msbuild环境下使用如下命令:

msbuild /m /p:Platform=<platform> /p:Configuration=<configuration> Build\Chakra.Core.sln :: 举个例子 msbuild /m /p:Platform=x64 /p:Configuration=debug Build\Chakra.Core.sln
ChakraCore学习笔记(一) ―― 在Windows上编译ChakraCore

另外ChakraCore遵守主干开发分支发布的原则,所以我们想提交任何的修改只需要在master分支上开发就可以啦,当然请不要忘记fork并创建相应的issue和pull request,绝对不要直接往上提交。

4. 使用ChakraCore

好的,现在我们应该已经成功编译了ChakraCore的代码了,我们来简单看一下怎么使用它吧!

首先我们在VS里面新建一个工程,我们这就叫它ChakraCoreTest吧。

然后在使用ChakraCore之前,我们需要设置一下项目属性:

把ChakraCore目录下的lib\jsrt添加到C/C++ -> General -> Additional Include Directories中:


ChakraCore学习笔记(一) ―― 在Windows上编译ChakraCore

把ChakraCore.lib添加到Linker -> Input -> Additional Dependencies中:


ChakraCore学习笔记(一) ―― 在Windows上编译ChakraCore

把ChakraCore目录下的Build\VcBuild\bin\$(PlatformTarget)_$(Configuration)目录添加到Linker -> General -> Additional Library Directories中:


ChakraCore学习笔记(一) ―― 在Windows上编译ChakraCore

最后我们把main函数所在文件替换成如下内容,这个是 ChakraCore给的Hello World程序 ,用来演示如何使用ChakraCore。

#include"stdafx.h" #include<stdint.h>// To work around issue #2510 temporarily: // https://github.com/Microsoft/ChakraCore/issues/2510 #include"ChakraCore.h" #include<string> #include<iostream> using namespace std; intmain() { JsRuntimeHandle runtime; JsContextRef context; JsValueRef result; unsigned currentSourceContext = 0; // Your script; try replace hello-world with something else wstring script = L"(()=>{return \'Hello world!\';})()"; // Create a runtime. JsCreateRuntime(JsRuntimeAttributeNone, nullptr, &runtime); // Create an execution context. JsCreateContext(runtime, &context); // Now set the current execution context. JsSetCurrentContext(context); // Run the script. JsRunScript(script.c_str(), currentSourceContext++, L"", &result); // Convert your script result to String in JavaScript; redundant if your script returns a String JsValueRef resultJSString; JsConvertValueToString(result, &resultJSString); // Project script result back to C++. const wchar_t *resultWC; size_t stringLength; JsStringToPointer(resultJSString, &resultWC, &stringLength); wstringresultW(resultWC); cout << string(resultW.begin(), resultW.end()) << endl; system("pause"); // Dispose runtime JsSetCurrentContext(JS_INVALID_REFERENCE); JsDisposeRuntime(runtime); return 0; }

编译,然后运行吧!


ChakraCore学习笔记(一) ―― 在Windows上编译ChakraCore

本文系统(windows)相关术语:三级网络技术 计算机三级网络技术 网络技术基础 计算机网络技术

分页:12
转载请注明
本文标题:ChakraCore学习笔记(一) ―― 在Windows上编译ChakraCore
本站链接:http://www.codesec.net/view/532686.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 系统(windows) | 评论(0) | 阅读(106)