面试的间隙回头复习了一下node,感觉node就像一个胶带,把V8和libuv粘在了一起。

V8毫无疑问,负责解析执行JavaScript,相当于语言层面的桥梁;而libuv则是负责操作系统底层功能的封装,例如基于IOCP的event loop、file system、non-blockiong network等。简单来说node将两者结合在一起,赋予JS操作底层方法的能力,扩大了这门语言的应用面。

其实之前一直在避开这个库,因为有点难……至于为什么突然又搞,因为之前已经把所有比较上层和简单的模块都写完了,剩下的必须深入C++部分才能理解。比如说上篇timer模块,其中的定时器执行依赖了内置模块TimerWrap对象,这个对象……呃,如下:

TimerWrap(Environment* env, Local object)

: HandleWrap(env,object,

reinterpret_cast(&handle_),

AsyncWrap::PROVIDER_TIMERWRAP) {int r = uv_timer_init(env->event_loop(), &handle_);

CHECK_EQ(r,0);

}

不用懂这个,看到uv两个小字母就知道这个定时器也是由libuv实现的,并且依赖于事件轮询。

自己装的逼,含泪也要写完……迟早也需要看这个,不如开始吧。

这一节只讲怎么编译启动libuv,并在自己项目引入libuv库(windows),虽然很简单,但是搞了整整一天,异常痛苦,对于没接触过C++项目的我来说太难了。

万事第一步,先下载源码。跟node不一样,直接去github上搞:https://github.com/libuv/libuv

然后是老样子python2.6/2.7、vs2017那些,参照启动node的步骤。

最后双击目录的vcbuild,你会发现cmd窗口一闪而过,又出问题了。。。

当时我直接打开了那个bat文件,发现根本流程有点奇怪:

set target_env=@rem Lookfor Visual Studio 2017 only ifexplicitly requested.if "%target_env%" NEQ "vs2017" goto vs-set-2015echo Lookingfor Visual Studio 2017

这里的target_env根本没定义,所以直接跳到寻找2015或更低版本的vs逻辑,并且上面的注释说要精确指定?于是我直接在set那里加上了=vs2017,理所当然的成功了。

但是,正确的方法是:打开当前目录的cmd,输入 vcbuild vs2017,回车

cmd会自动执行脚本,并把vs2017作为参数带进去,然后那个target_env会被赋值……我也不知道为什么只有2017要精确指定

这里的sln生成特别快,在vs中打开这个解决方案,编译运行生成一个debug文件夹。

直接讲如何在空白C++项目中引入该库,血泪教训,不要问为什么这么做,反正能跑起来!

1、生成一个windows应用台控制程序

2、把libuv目录下的include文件夹和debug/lib/libuv.lib文件都复制到自己项目的根目录下

3、打开项目/属性,然后在C/C++那点常规,在附加包含目录添加一个include,如图:

4、继续选择下面的链接器/输入,然后在附加依赖项添加一串lib:

libuv.lib

Ws2_32.lib

iphlpapi.lib

Userenv.lib

Psapi.lib

advapi32.lib

psapi.lib

shell32.lib

userenv.lib

ws2_32.lib

user32.lib

当时我只添加了一个libuv.lib,导致我流逝了了一晚上的生命,血亏。

做完这些,就可以尝试写一个demo跑一下了,测试代码如下:

#include "uv.h"#include

intmain()

{

uv_loop_t*loop =uv_default_loop();

uv_run(loop, UV_RUN_DEFAULT);

std::cout<< "Hello World!\n";

}

不要问这个程序能干啥,如果编译后不报错,那就是成功了。

libuv访问mysql_浅析libuv源码-编译启动相关推荐

  1. 深入出不来nodejs源码-编译启动

    整整弄了两天,踩了无数的坑,各种奇怪的error,最后终于编译成功了. 网上的教程基本上都过时了,或者是版本不对,都会报一些奇怪的错误,这里总结一下目前可行的流程. node版本:v10.1.0. 首 ...

  2. redhad环境android源码编译,启动流程  |  Android 开源项目  |  Android Open Source Project...

    建议的设备启动流程如下所示: 图 1. 启动时验证流程 适用于 A/B 设备的流程 如果设备使用的是 A/B 系统,则启动流程略有不同.必须先使用启动控件 HAL 将要启动的槽位标记为 SUCCESS ...

  3. Android源码编译及启动模拟器

    Android源码编译及启动模拟器 源码下载 (1)更改下载源 (2)安装源码下载工具 (3)下载源码 (4)安装环境依赖 源码编译 启动模拟器 源码下载 Ubuntu18.0 (1)更改下载源 源码 ...

  4. php 7.0 编译安装mysql_源码编译安装php7.0.5

    源码编译安装php7.0.5 源码包下载地址 安装epel扩展yum源 [root@xuegod63 ~]# yum clean all [root@xuegod63 ~]# yum list 注:R ...

  5. centos 访问网页重启php_php项目上线基于docker运行php+源码编译实现Nginx+阿里云RDS连接实现...

    项目背景: 公司项目上线要求运维把上线工作做好,并实现稳定性运行,活不多说,干! 环境要求: CentOS Linux release 7.2.1511 (Core) docker 版本:19.03. ...

  6. ssh源码编译安装mysql_总结源码编译安装mysql

    最近在学习源码编译安装LAMP.LNMP时,一直遇到一个难题,就是就是mysql无论怎么源码编译安装,到最后启动服务都提示"Starting MySQL.The server quit wi ...

  7. 手机编译mysql_玩转MySQL 8.0源码编译

    先说第一种,自带boost的源码编译 首先,下载带boost代码的MySQL源码包,在官网下载页面有相应的提示:  解压缩后,就可以开始编译了.首先,指定编译的选项: [root@yejr.me]# ...

  8. nginx源码编译、负载均衡及模块的扩展

    1.nginx源码编译 实验环境: iptables和selinux关闭 redhat6.5 nginx:test1: 172.25.1.11 [root@test1 ~]# ls nginx-1.1 ...

  9. Nginx 源码编译安装

    Nginx 源码编译安装环境 Centos7 Nginx1.8.1    下载地址:http://nginx.org/download/ 选择自己想要的版本 我这边使用1.8.1,下载地址:http: ...

最新文章

  1. html 流动效果,html5 canvas流动的海浪特效
  2. c语言 结构成员 变量引用,C++结构体变量的引用
  3. [原创].使用Nios II 9.1中的Flash Programmer无法固化程序到EPCS上
  4. linux var log管理,Linux下的syslog和/var/log
  5. lintcode-76-最长上升子序列
  6. 自学JAVA-11:IO流
  7. java uuid生成算法_Java生成UUID
  8. 红外图像动态范围压缩和对比度增强
  9. 高清视频录播服务器网站,高清录播服务器——DDA RSS3000
  10. 2022年执业兽医考试经典试题及答案
  11. QQ邮箱炸啦,我的附件名怎么乱码?解决javaMail发送QQ邮件,附件名乱码的问题
  12. 泥瓦匠聊并发编程:线程与多线程必知必会(基础篇)
  13. 2020.10.24--AI--波纹便签、字体设计、徽章制作
  14. OTFS白皮书-翻译
  15. 初探Meterpreter-emaste_r
  16. html网页打不开二级网页,遇到二级网页打不开怎么办 讲解二级页面打不开的处理方法...
  17. 如何清除木马--104种木马手工清除方法
  18. Vuex入门(1)—— Vuex的设计初衷和简单使用
  19. 辽师计算机杂志期刊等级认定,辽师学术期刊认标准(2017年5月修订).doc
  20. 三星s20 android 10.0,同为骁龙865新旗舰,小米10对比三星S20,差距有多大

热门文章

  1. 《Cinema 4D + After Effects动态图形设计案例解析》——1.2 动态图形的历史和发展...
  2. 主流浏览器有哪些?这些浏览器的内核分别是什么?
  3. 香港城市大学全球首创3D打印微型机器人技术 有望作治疗癌症用途
  4. NAND FLASH基础知识总结
  5. java html5 cms,企业内部cms业务管理系统html5简洁的模板
  6. 解决页面间体验问题的纯前端容器Lath
  7. openpyxl超详细笔记
  8. 【中国人口金字塔2019,python,pandas,matplotlib,numpy 】
  9. 【笔记】Android桌面角标Badge官方文档和兼容性解决
  10. 浅谈共线性的产生以及解决方法(中篇——今生)