mac下搭建v8环境

mac下搭建v8环境,第1张

写在前面的话

项目需要,研究一下v8引擎,简介就不说了,官网是:

https://v8.dev 

你在官网doclass="superseo">c目录下,你能找到全部的教程,包括本文的一部分内容也是搬运过来:

https://v8.dev/docs

但是,搭建环境的过程总是那么不尽人意,我花了一天多才搞定环境。


网上的文档有很多,大部分的都太老了,不具备参考意义。


我中间遇到了3个问题,差点被劝退,可能下次你遇到的又不一样了。


如果你碰到了问题,可直接跳转到 “遇到的问题” 看看

踩坑后原创,你就不要转载了。


文档的时间是:2022年4月

我的环境
  • macOS Monterey 12.1

  • Xcode 13.2 Build version 13C5066c xcode-beta

  • python3.10(mac默认安装python2.7,这里有个坑,后面会说)

  • 全程梯子

开始搭建环境 1.拉代码

推荐直接拉depot_tools仓库,它相当于是一个工具,管理着v8的代码,官方更推荐用它,我也用的是它。



注:这是在google git上,并非github上,需要自行翻墙注册goolgle git账号,还需要visa卡认证,反正挺搞人的

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

或不推荐但能用:

官方github上有v8的镜像,地址如下,但是github上没有官方的depot_tools镜像,有条件的建议还是老老实实走上面方式:

https://github.com/v8/v8
2.加载依赖

等代码都拉完了,切到depot_tools目录下

mkdir ~/v8
cd ~/v8

拉v8代码,总共1.1G,时间有点长。



可以试试在github官方镜像下拉下来,拷贝到depot_tools目录下

fetch v8

更新依赖库,如果你没有depot_tools工具的话,我也不知道该咋办。


gclient sync
3.一键编译

gm脚本是一键编译脚本,刚开始弄建议用它编译就好

~/workspace/depot_tools/v8/tools/dev/gm.py

添加到环境变量下,看自己喜好

alias gm=/User/xxxx/workspace/depot_tools/v8/tools/dev/gm.py

开始构建,要花很长的时间,这里编译遇到了几个问题。


请移步 “遇到的问题”

gm x64.release
//或者,要在构建后立即运行测试:
gm x64.release.check

最后,在out目录下找到d8文件

~/workspace/depot_tools/v8/out/x64.release/d8

官方提供手动编译都流程,我暂时用不到,请移步官网:

https://v8.dev/docs/build-gn
4.运行测试

d8命令行运行:


创建一个helloworld.js


'use strict';

async function hello() {
  console.log("hellow");
}

hello();
./d8 hello-world.js


以上你就完成了基础的内容了。


5.在 C++ 应用程序中嵌入 V8 JavaScript 引擎

你可直接看官网文档,我搬运过来的:https://v8.dev/docs/embed

//以官方hello-wold为例
~/workspace/depot_tools/v8/samples/hello-world.cc

//找到它
~/workspace/depot_tools/v8/tools/dev/v8gen.py
//官方也建议你也加到~/.bash_profile里去
alias v8gen=/User/xxx/workspace/depot_tools/v8/tools/dev/v8gen.py

//在v8根目录下
//开始构建,花很长时间
tools/dev/v8gen.py x64.release.sample

//在 Linux 64 系统上构建静态库:
ninja -C out.gn/x64.release.sample v8_monolith

//编译hello-world.cc,链接到构建过程中创建的静态库。


例如,在 64 位 Linux 上使用 GNU 编译器: g++ -I. -Iinclude samples/hello-world.cc -o hello_world -lv8_monolith -Lout.gn/x64.release.sample/obj/ -pthread -std=c++14 -DV8_COMPRESS_POINTERS //最后你在v8根目录下就能找到hello-world ./hello-world Hello, World! 3 + 4 = 7 //你成功了。


上面基本上是全部的内容了,下面是我编译时碰到的几个问题。


遇到的问题 问题一

编译的时候我有以下的报错:

ImportError: cannot import name zip_longest

这个问题是耽误我最久的了。


开始挠头+1

原因就是python版本不对,py3是zip_longest库,py2下是izip_longest。


mac自带2.7版本的python,我尝试用修改~/.bash_profile,使用alias,不尽人意,即便bin修改成了python3,但是用到的库还是mac下2.7版本的库

你在/usr/bin下可以看到,编译的时候用到了这里头的库:

lrwxr-xr-x  1 root   wheel        75 Dec  8 07:39 python -> ../../System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
开始挠头+2

这个python软链,还是只读的,网上说出厂就给你定死了,在磁盘的只读区域里。


网上有办法修改它,但是我没成功,也就没这么干。



你非要改,参考链接如下:

https://www.csdn.net/tags/Ntjakg3sMTU0NjgtYmxvZwO0O0OO0O0O.html
曲线救国

仅针对这个报错,stack overflow上有其它办法,就是修改你的代码,把import的库修改一下。



我没这么干:

https://stackoverflow.com/questions/38634810/failing-to-import-itertools-in-python-3-5-2
我的解决办法

经过反复抓狂后,在stack overflow下了解到了conda包管理器。



安装你的conda

https://docs.conda.io/en/latest/miniconda.html 

教程你可以看这里:

https://www.cnblogs.com/chantmee/p/15359704.html

测试一下

conda -V

conda装完后,你会发现你的bash变成了这样:

(base) xxxdeMacBook-Pro:x64.release xxx$

你现在正处于base默认的环境下。


创建python3.10的环境,会给你拉好多库:

//3.10是版本号,看你心情就好。


py310是自定义环境名,也看你心情 conda create -n py310 python=3.10

环境弄好后,使用以下切换到这个环境

conda activate py310 

随后,你的bash变成了这样

(py310) xxxdeMacBook-Pro:x64.release xxx$

再次尝试编译:

gm x64.release.check

终于大功告成。


问题二

忘了在哪一步出的错,应该也是编译的时候。


xcode-select: error: tool ‘xcodebuild’ requires Xcode, but active developer directory ‘/Library/Developer/CommandLineTools’ is a command line tools instance

这个在stack over flow上有解答了:

https://stackoverflow.com/questions/17980759/xcode-select-active-developer-directory-error

或者看图片:

问题三

我在拉取依赖的时候,碰到了证书验证不通过

gclient sync

报错内容大致如下,证书验证不通过:
urllib.error.URLError:

后来想想,可能是我梯子的问题,也抓狂了好久,执行一下脚本就好了:

踩坑后原创,你就不要转载了。


最后写完blog想到的,你如果拉不到depot_tools,我可以发你。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/578335.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)