v8从入门到入土:编译篇

1,143 阅读2分钟

由于工作需要,需要做v8(js引擎)的嵌入式开发,踩坑无数,记下心得,以备不时之需。

环境:win10,vs2019

一:下载v8代码(参考文档 v8.dev/docs/source…

  1. 下载depot_tools

  2. 将depot_tools的路径加入到环境变量(一些注意细节参考这里chromium.googlesource.com/chromium/sr…

  3. 在cmd中执行gclient,执行更新

遇到的坑1: 这些步骤都比较简单,但是比较坑的就是你会可能发现卡着不动
解决方案:
方式一:翻墙,有时也不稳定,多试几次
方式二:配代理 + host修改,代理:每个公司可能设置不一样,这里省略。
xx.xx.xx.xx storage.l.googleusercontent.com
xx.xx.xx.xx commondatastorage.googleapis.com
xx.xx.xx.xx googleapis.com
xx.xx.xx.xx chrome-infra-packages.appspot.com
xx.xx.xx.xx appspot-preview.l.google.com
遇到的坑2: 在执行gclient的时候提示Windows Kits\10\Debuggers这个目录没有,可能是vs安装的时候哪里没勾全,但我从vs安装指导里面仔细找了一遍也没找到有效信息,从vs里面重装这个库也没用
解决方案: 卸载本地已安装 从官网上下载并重新安装windows sdk 10

二:编译代码(参考文档 v8.dev/docs/embed

编译代码有两种方式:
命令方式

  • gn args out.gn/x64.release.sample(会弹出一个文件需要你编辑,编辑完后关闭就会根据你填写的参数生成一些配置文件)

  • ninja -C out.gn/x64.release.sample v8_monolith,再通过命令就可以生成静态库了,大概需要编译十几分钟

    vs工程方式(这个方式官网说没有直接说明,还是后续我自己google出来的)
  • gn gen --ide=vs out.gn\x64_solution,通过命令生成vs工程all.sln
  • 打开工程然后编译你需要的项目,如d8(一个可以交互的控制台)

三:Hello world!

如果你是通过vs工程方式的话,剩下的就好办了,直接编译v8_hello_world这个项目,然后会在out.gn\x64_solution这个目录下生成v8_hello_world.exe,运行它你就会看见

这个工程里面项目很多,足够你慢慢了解v8了,比如你可以看下v8_sample_process这个项目,它实现了一个简单的js跟c++之间交互的例子。

PS:以前写的老文章,从知乎 copy 过来