ranksvm avatar

LIBUV在VS2017下编译步骤(不使用Lib)

ranksvm

Published: 22 Nov 2018 › Updated: 22 Nov 2018LIBUV在VS2017下编译步骤(不使用Lib)

LIBUV在VS2017下编译步骤(不使用Lib)

LIBUV在VS2017下编译步骤(不使用Lib)
libuv 是 Node 的新跨平台抽象层,用于抽象 Windows 的 IOCP 及 Unix 的 libev。作者打算在这个库的包含所有平台的差异性。
特性:
非阻塞 TCP 套接字
非阻塞命名管道
UDP
定时器
子进程生成
通过 uv_getaddrinfo 实现异步 DNS
异步文件系统 API:uv_fs_*
高分辨率时间:uv_hrtime
正在运行程序路径查找:uv_exepath
线程池调度:uv_queue_work
TTY控制的ANSI转义代码: uv_tty_t
文件系统事件现在支持 inotify, ReadDirectoryChangesW 和 kqueue。很快会支持事件端口:uv_fs_event_t
进程间的 IPC 与套接字共享:uv_write2

已受支持的平台: Microsoft Windows 操作系统,如 Windows XP SP2。使用 Visual Studio 或 MinGW 构建 Linux 2.6 使用 GCC 工具链 MacOS 使用 GCC 或 XCode 工具链 Solaris 121 或之后版本,使用 GCC 工具链。
将LIBUV代码集成到自己的项目中,不使用Lib的形式,有一定的优点。花了不少时间,
在VS2017下编译LIBUV,步骤如下:
1,在项目文件夹下建立目录libuv(可选的操作,不过便于源代码管理)。拷贝LIBUV的include目录和src目录,包括它们的众多源代码文件。其中include\uv下只保留五个文件即可:
Errno.h threadpool.h tree.h version.h win.h
src目录只保留win目录的文件,删除unix目录的文件,我的项目建立在VS2017,Win10的环境。
2,编译时,将LIBUV\include\uv, LIBUV\include, LIBUV\src\win, LIBUV\src四个文件夹加入到编译时需要的头文件目录。
选择项目属性,=>VC目录=>包含目录
3,为提高编译速度,考虑使用预编译文件。预编译文件的详细解释,可参阅:
https://hownot2code.com/2016/08/16/stdafx-h/
为LIBUV单独加上预编译文件。
VS2017有默认的pch.h及pch.cpp做预编译文件,另外我为LIBUV增加文件LibUVPreCompile.h, LibUVPreCompile.c做预编译文件。要求LIBUV的所有.c文件第一句加上
#include "LibUVPreCompile.h"
选择LibUVPreCompile.c后,在LibUVPreCompile.c属性页=>配置属性=>c/c
=>预编译头做如下修改:
预编译头 : 创建/Yc (LibUVPreCompile.c创建为预编译文件LibUVPreCompile.pch)
预编译头文件 : LibUVPreCompile.h
预编译头输出文件:LibUVPreCompile.pch
另外,将LIBUV的所有.c文件的属性都修改。修改步骤,逐一选择LIBUV的.c文件,在.c属性页=>配置属性=>c/c++=>预编译头做如下修改:
预编译头 : 创建/Yu (注意和前面的差别,使用预编译文件LibUVPreCompile.pch)
预编译头文件 : LibUVPreCompile.h (可不要吗?)
预编译头输出文件:LibUVPreCompile.pch(可不要吗?)
4,LIBUV的errno.h改名为uv_errno.h,因为和VS2017的库文件有冲突。当然,uv.h里的#include errno.h修改为:#include uv_errno.h
同样的,winsock.h->uv_winsock.h,也是命名冲突的问题。当然。winsock.c里的#include winsock.h修改为:#include uv_ winsock.h
5,在LibUVPreCompile.h里加上:
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_NONSTDC_NO_DEPRECATE
因为LIBUV里面使用了一些过时的函数。要求LIBUV的所有.c文件第一句加上#include "LibUVPreCompile.h",自然带来这个好处,不用每个文件修改此项配置。
在fs_event.c里加上,
#pragma warning( disable : 4703 ) //注意:disable(空格):
/* LIBUV这段代码有问题,long_path可能是空指针。
Tty.c里面也有同样的问题,也加上上面的编译代码。
成功通过编译,并且试验了部分代码,OK!

Leave LIBUV在VS2017下编译步骤(不使用Lib) to:

Written by

Read more #libuv posts


Best Posts From ranksvm

We have not curated any of ranksvm's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From ranksvm