由于工作需要,需要做v8(js引擎)的嵌入式开发,踩坑无数,记下心得,以备不时之需。
环境:win10,vs2019
一:下载v8代码(参考文档 v8.dev/docs/source…)
-
下载depot_tools
-
将depot_tools的路径加入到环境变量(一些注意细节参考这里chromium.googlesource.com/chromium/sr…)
-
在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 过来