在Mac上下载和编译V8引擎

前言

第一次下载和使用V8引擎,遇到不少坑。

这里对下载和编译V8的过程,以及过程中遇到的问题和解决方法进行记录,希望能帮到大家。

开始之前

由于编译V8引擎需要用到depot_tools工具集,且相关配置下载需要访问外网,所以必须得准备一个科学的上网环境。这里可以在网上找一些免费的节点来使用,大部分机场都会提供一些免费的限时/限流服务,有条件的也可以自行搭建或者购买。

详细步骤

  1. 打开终端后,先设置代理

    export http_proxy="http://127.0.0.1:1087" # 代理在窗口被关闭之前一直有效
    export https_proxy="http://127.0.0.1:1087" # 端口应根据个人情况进行设置
    
  2. 安装Xcode

    通过 App Store 下载安装,如果之前安装过 Xcode Command Line Tools,可能会在编译阶段出现如下报错

    ERROR at //build/config/mac/mac_sdk.gni:61:5: Script returned non-zero exit code.
    

    此时可以通过修改 xcode-select 路径来解决问题

    xcode-select -p # 查看当前路径
    xcode-select -v # 查看版本
    sudo xcode-select -s /Applications/Xcode.app/Contents/Developer # 修改路径
    
  3. 获取depot_tools文件,找一个合适的目录执行下面的命令

    git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
    
  4. 将 depot_tools 添加到系统环境变量

    sudo vim ~/.bash_profile
    

    添加 depot_tools 的路径

    export PATH = "所在目录/depot_tools":$PATH
    

    输入:wq保存修改并退出,然后更新环境变量

    source ~/.bash_profile
    
  5. 配置python

    这里是我踩到的第一个坑。由于V8项目中的python脚本需要在python2.x的环境下运行,如果系统默认的环境是python3.x就会导致后续工作出现如下错误

     TypeError: a bytes-like object is required, not 'str'
    

    所以这里需要修改默认的python软链接

    (1)查看本机python

    which python
    which python2
    which python3
    

    (2)移除原有的软链接

    sudo rm /usr/bin/python
    

    这一步可能会因为系统文件保护机制受到阻止,可以重启Mac,在开机时按下command+R进入安全模式,打开终端,然后执行csrutil disable,重启系统即可。

    (3)设置新的软链接

    sudo ln -s /usr/bin/python2 /usr/bin/python # 具体路径根据个人情况进行输入
    

    也可以使用谷歌提供的python虚拟环境vpython,在.gn文件中添加 script_executable = "vpython"

  6. 安装 depot_tools 构建系统的所有依赖(大约40G)

    gclient sync
    

    过程中可能会报错,这是第二个坑,错误信息如下

    Error:RPC failed; curl 18 transfer closed with outstanding read data remaining
    

    原因是缓存溢出了,这里把httpBuffer加大即可

    git config --global http.postBuffer 524288000 # 不够的话再继续往上加
    
  7. 下载v8

    fetch v8
    
  8. 编译v8

    方法一:

    (1)使用gn生成编译文件

    tools/dev/v8gen.py x64.release
    

    (2)使用ninja编译

    ninja -C out.gn/x64.release
    

    这里踩了第三个坑,编译时出现如下错误

    means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
    

    为了解决该问题,需要删除错误的.o文件,修改 Xcode的 build setting>Symbols hidden by default 选项为统一的YES/NO,再重新编译

    不过这一步笔者也没有成功,如果实在行不通可以采用方法二

    (3)使用py脚本测试编译后的文件是否有问题

    tools/run-tests.py --gn
    

    方法二:

    (1)使用gn建立Xcode工程

    gn gen out/gn --ide="xcode"
    

    (2)直接用Xcode打开 /out/gn/all.xcworkspace 文件,在 Product>Scheme 下选择 d8 进行 build 即可

    (3)调试,在 Product>EditScheme 菜单中把poc文件作为运行参数,在对应文件中下好断点,直接运行就会断下来了。

参考

Error:RPC failed; curl 18 transfer closed with outstanding read data remaining

Strange warnings from the linker(ld) [duplicate]

在mac上使用xcode调试v8

你可能感兴趣的:(在Mac上下载和编译V8引擎)