深入出不来nodejs源码-编译启动(1)】的更多相关文章

整整弄了两天,踩了无数的坑,各种奇怪的error,最后终于编译成功了. 网上的教程基本上都过时了,或者是版本不对,都会报一些奇怪的错误,这里总结一下目前可行的流程. node版本:v10.1.0. 首先需要一些准备工作: 1.Visual Studio 2017 传送门:https://www.visualstudio.com/zh-hans/downloads/ 2.python2.7 传送门:https://www.python.org/downloads/release/python-27…
原本打算是把node源码看得差不多了再去深入V8的,但是这两者基本上没办法分开讲. 与express是基于node的封装不同,node是基于V8的一个应用,源码内容已经渗透到V8层面,因此这章简述一下我目前理解的V8引擎吧. 首先需要理解的是V8是一个JS代码运行平台,可以将JS代码编译执行. 本节就非常浅显的讲一下V8内部一些常见类,以及一个运行JS代码的简单demo. (由于研究V8引擎原理的人非常多,本人学识浅薄,可以去参考别人的博客) 参考资料: 1.很多大佬的博客 2.V8引擎API文…
鸽了好久,最近沉迷游戏,继续写点什么吧,也不知道有没有人看. 其实这个node的源码也不知道该怎么写了,很多模块涉及的东西比较深,JS和C++两头看,中间被工作耽搁回来就一脸懵逼了,所以还是挑一些简单的吧! 这一篇选的是定时器模块,简单讲就是初学者都非常熟悉的setTimeout与setInterval啦,源码的JS内容在目录lib/timers.js中. node的定时器模块是自己单独实现的,与Chrome的window.setTimeout可能不太一样,但是思想应该都是相通的,学一学总没错.…
node的源码分析还挺多的,不过像我这样愣头完全平铺源码做解析的貌似还没有,所以开个先例,从一个API来了解node的调用链. 首先上一张整体的图,网上翻到的,自己懒得画: 这里的层次结构十分的清晰,从上到下如果翻译成语言层面,依次是JS.C++.windows(UNIX)的系统API. 最高层也就是我们自己写的JS代码,node会首先通过V8引擎进行编译解析成C++,随后将其分发给libuv,libuv根据操作系统的类型来分别调用底层的系统API. 下面通过fs.stat这个API来一步步探索…
这一节内容超级简单,纯JS,就当给自己放个假了,V8引擎和node的C++代码看得有点脑阔疼. 学过DOM的应该都知道一个API,叫addeventlistener,即事件绑定.这个东西贯穿了整个JS的学习过程,无论是刚开始的自己获取DOM手动绑,还是后期vue的直接@click,所有的交互都离不开这个东西. 同样,在node中,事件绑定也贯穿了整个框架.基本上大多数的内置模块以events为原型,下面的代码随处可见: EventEmitter.call(this); 不同的是,页面上DOM的事…
我发现每次细看源码都能发现我之前写的一些东西是错误的,去改掉吧,又很不协调,不改吧,看着又脑阔疼…… 所以,这一节再探,是对之前一些说法的纠正,另外再缝缝补补一些新的内容. 错误在哪呢?在之前的初探中,有这么一块代码: // The bootstrapper scripts are lib/internal/bootstrap/loaders.js and // lib/internal/bootstrap/node.js, each included as a static C string…
重新审视了一下上一篇的内容,配合源码发现有些地方说的不太对,或者不太严谨. 主要是关于内置模块引入的问题,当时我是这样描述的: 需要关注的只要那个RegisterBuiltinModules方法,从名字也可以看出来,就是加载内置模块. 然而并不是啊……从名字可以看出来,这只是一个注册方法. Register:登记.注册. 因此,这里并不会真正加载内置模块,而只是做一个登记,表示有哪些模块一会要加载,统计一下. 上一节简单看了下该方法的宏,是一个_register_XX方法的批量调用,而该方法的定…
终于可以填上坑了. 简单回顾一下之前JS篇内容,每一次setTimeout的调用,会在一个对象中添加一个键值对,键为延迟时间,值为一个链表,将所有该时间对应的事件串起来,图如下: 而每一个延迟键值对的触发,则是在链表头生成的时候就已经开始了,如下: function TimersList(msecs, unrefed) { //... // 来源于C++内置模块 const timer = this._timer = new TimerWrap(); /// ... // 触发 timer.st…
花了差不多两周时间过了下primer C++5th,完成了<C++从入门到精通>.(手动滑稽) 这两天看了下node源码的一些入口方法,其实还是比较懵逼的,语法倒不是难点,主要是大量的宏造成直接阅读上的不方便. 有些宏感觉真是一点鸟用都没有,比如说: #define LIKELY(expr) expr #define UNLIKELY(expr) expr #define PRETTY_FUNCTION_NAME "" 这玩意翻译成JS大概就是: const LIKELY…
面试的间隙回头复习了一下node,感觉node就像一个胶带,把V8和libuv粘在了一起. V8毫无疑问,负责解析执行JavaScript,相当于语言层面的桥梁:而libuv则是负责操作系统底层功能的封装,例如基于IOCP的event loop.file system.non-blockiong network等.简单来说node将两者结合在一起,赋予JS操作底层方法的能力,扩大了这门语言的应用面. 其实之前一直在避开这个库,因为有点难……至于为什么突然又搞,因为之前已经把所有比较上层和简单的模…
开发环境 不同的版本对应的开发环境不同(这里以3.3.3版本说明) jdk11+:参考jdk11+安装(win) Maven3.6+:Maven安装配置 Git:参考Git安装 IDEA: 参考IDEA安装 PostgreSQL11.7+:参考postgresql安装(windows) 源码拉取 GitHub或者Gitee搜索thingsboard,复制链接地址进行拉取. GitHub拉取 GitHub项目地址:https://github.com/thingsboard/thingsboard…
下载nodejs,node-v6.1.0.tar.gz 链接: https://pan.baidu.com/s/1eCtNBWD5yaKiQIHp3pRKew 提取码: faun 注意对应版本的gcc,node-6.1.0需要最低版本gcc是4.3.8 x86 架构编译 解压node-v6.1.0.tar.gz tar zxvf node-v6.1.0.tar.gz 生成MakeFile文件 [cvicse@node155 node]$ cd node-v6.1.0 [cvicse@node15…
一般是报error问题就是我们的mysql没有权限,这里主要是指三点:一个是mysql的安装主目录要设为mysql用户和用户组.一个是logs目录设置为mysql用户以及用户组.还有一个是data目录也是设置为用户以及用户组.(如果有其他的是mysql需要的目录或文件也要这样子设置用户和用户组) 只要设好权限基本不报这个错误. 但是我今天想更换存储的数据目录,所以我就把原来的数据目录下的所有文件删除了,直接在my.cnf文件中指定数据目录的新目录,然后再启动mysql发现就不行了,就报上面的那个…
如果是自己通过repo和git直接从google官网上download的源码,请忽略这个问题,但是由于google在国内被限制登录,通过这一种方法不是每个人都能download下来源码,通常的做法就是从别人那拷贝,然后自己编译,那么通常会出现下面的错误: No rule to make target 'external/chromium_org/third_party/angle/.git/index', need by ..... 进入相应的目录,发现在angle目录下根本没有.git的目录,…
环境:CentOS 6.7 安全加固需求,由于某盟扫描系统主机有SSL系列漏洞,客户要求必须修复: 解决方案:将SSH/SSL升级到最新版本,删除SSL旧版本(实测不删除旧版本某盟扫描无法通过). 当前版本:OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 当前最新版本:OpenSSH_7.3p1, OpenSSL 1.0.2h 1.查看SSH/SSL当前版本 2.下载最新的SSH/SSL 3.源码编译安装SSL 4.源码编译安装SSH 5.删除SSL旧版本 6.写在后面 1…
一 : 普通用户: 安装前准备环境: 1.检查Linux 版本 命令: cat /etc/redhat-release 2.检查 gcc.gcc-c++ 是否安装过 命令: rpm -q gcc rpm -q gcc-c++ 3.安装 gcc.gcc-c++ 命令: yum -y install gcc gcc-c++ kernel-devel 注意 :  如果是第一个安装,有可能 会报 错误:xxx is not in the sudoers file. This incident will…
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 以前也写过一篇有关mysql5.0源码编译的文章,该文章为<烂泥:mysql5.0数据库源码编译安装>.但是MySQL自5.5版本以后,就开始使用cmake 编译工具. 所以这篇文章主要是讲解如何通过cmkae编译安装mysql5.5及其以后的版本. 注意本篇文章的环境为centos6.5 64bit. cat /etc/system-release uname -a 在安装mysql数据库之前,我们首先要在系统中新建mysql运行时的用户mys…
欢迎转载,转载请注明出处,徽沪一郎. 概要 本来源码编译没有什么可说的,对于java项目来说,只要会点maven或ant的简单命令,依葫芦画瓢,一下子就ok了.但到了Spark上面,事情似乎不这么简单,按照spark officical document上的来做,总会出现这样或那样的编译错误,让人懊恼不已. 今天闲来无事,又重试了一把,居然o了,做个记录,以备后用. 准备 我的编译机器上安装的Linux是archlinux,并安装后如下软件 scala 2.11 maven git 下载源码 第…
一.简介 CentOS 6.5的yum源可以安装的SVN客户端版本太低了,1.6.11,所以需要升级到1.8.10,而官网有没有找到1.8.10的安装包,只能选择源码编译安装. 二.安装步骤 参考官网:http://svn.apache.org/repos/asf/subversion/trunk/INSTALL 源码下载:http://archive.apache.org/dist/subversion/ 源码编译subversion依赖许多别的工具,比如:apr.apr-util.libto…
英蓓特Mars board的android4.0.3源码编译过程 作者:StephenZhu(大桥++) 2013年8月22日 若要转载,请注明出处 一.编译环境搭建及要点: 1. 虚拟机软件virtual box 4.2.16 2. 虚拟机装操作系统 ubuntu10.04 32bit版 3. 虚拟机内存1.792GB, 硬盘500GB(未必用上这么多,使用动态模式) 4. JDK 这个稍麻烦点,针对android4.0.3,一定要安装jdk.6.0_31.因为官方ubuntu已经没有合适的源…
参考这篇博客 经过测试,8.0源码下载及编译之后,占用100多G的硬盘空间,尽量给ubantu系统多留一些硬盘空间,如果后续需要在编译好的源码上进行开发,需要预留更多的控件,为了防止后续出现文件权限问题,建议使用root用户进行开发 分为4个流程 源码下载 构建编译环境 编译源码 运行 源码下载 安装git并且配置 //安装git sudo apt-get install git //配置git用户名称和邮箱 git config --global user.name "your name&qu…
作者 : 韩曙亮  博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csdn.net/shulianghan VLC 二次开发 视频教程 : http://edu.csdn.net/course/detail/355 博客总结 : -- 本博客目的 : 让 Android 开发者通过看本博客能够掌握独立移植 VLC Media Player 核心框架到自己的 app 中,…
源码编译篇 1.  安装JDK1.8-181,操作系统添加JDK环境变量.Java -version验证一下. 注:Jenkins2.138版本,JDK必须jkd1.8.0-101以上,不支持Java9,Maven必须3.5.3以上. 2.  解压Maven3.5.4到指定目录(英文路径).操作系统添加Maven环境变量,接着配置Maven的conf\setting.xml文件. 定位到55行: 配置本都Maven仓库路径. <localRepository>C:\jstao\soft\spr…
  edgedb 基于python开发,同时源码重包含了好多子项目,以下进行简单的源码编译 clone 代码 需要递归处理,加上recursive,比较慢稍等 git clone --recursive https://github.com/edgedb/edgedb.git 效果 正克隆到 'edgedb'... remote: Enumerating objects: 165, done. remote: Counting objects: 100% (165/165), done. rem…
目录 前言 背景 安装软件 正文 Mac 分区 移动硬盘分区 Repo 下载源码 编译 源码导入 Android Studio 查看 碰到的问题 Could not find a supported mac sdk Undefined symbols for architecture i386 结语 致谢 前言 背景 工作需要,想着刚好有个趁手的兵器(Mac),虽然做好充足的功课,但是这场编译之旅还是十分曲折 本文主要记录本人使用macOs( 10.14) 在本地 checkout 出 AOSP…
参考文档:http://spark.apache.org/docs/1.6.0/building-spark.html spark安装需要选择源码编译方式进行安装部署,cdh5.10.0提供默认的二进制安装包存在未知问题,如果直接下载spark二进制安装文件,配置完成后会发现启动spark及相关使用均会报错. 编译spark需要联网,spark使用scala语言编写,所以运行spark需要scala语言,上一步已经安装了scala,scala使用java编写,所以安装scala需要jdk支持,上…
最近因为需求需要修改Tomcat中的某些功能,无奈只能研究那部分源码然后稍作修改. 目前Tomcat最新版是8.0,下载了源码包,编译并导入Eclipse中研究比较方便. 1. Tomcat8源码编译步骤 1.1 先到Apache Tomcat 8.0官网下载最新版Source Code Distributions,解压到某个目录下,如D:\apache-tomcat-8.0.5-src 1.2 使用ant编译 (1)安装ant 如果机器上已经安装了ant可以省略这一步,否则去ant官网下 载最…
#spark2.2.0源码编译 #组件:mvn-3.3.9 jdk-1.8 #wget http://mirror.bit.edu.cn/apache/spark/spark-2.2.0/spark-2.2.0.tgz ---下载源码 (如果是Hive on spark---hive2.1.1对应spark1.6.0) #tar zxvf spark-2.2.0.tgz ---解压 #cd spark-2.2.0/dev ##修改make-distribution.sh的MVN路径为$M2_HO…
写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些自己的经验,希望能对读者有所帮助.期间参考了许多前人的文章,后文会一一附上链接,在此先行谢过.在下能力有限,经验不足,请大家多多指教. 关键词:Ubuntu16.04 Server   深度学习环境搭建   安装   显卡驱动   CUDA8.0   cuDNN6.0   Bazel   源码编译 …
Sun JDK中采用javac将Java源码编译为class文件,这个过程包含三个步骤:     1.分析和输入到符号表(Parse and Enter)    Parse过程所做的工作有词法和语法分析.词法分析要完成将代码字符串转变为Token序列.语法分析则是根据语法将Token序列生成抽象语法树.    Enter过程将符号输入到符号表,通常包括确定类的超类型和接口.根据需要添加默认构造器.将类中出现的符号输入类自身的符号表中等. 2.注解处理(Annotation Processing)…