libuv之64位编译方法和入门示例

Posted 岬淢箫声

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了libuv之64位编译方法和入门示例相关的知识,希望对你有一定的参考价值。

如何编译64位 libuv

关于Socket基本编程模型,请参考:

  1. Socket编程模型之简单选择模型
  2. Socket编程模型之异步选择模型
  3. Socket编程模型之事件选择模型
  4. Socket编程模型之重叠IO(Overlapped I/O)模型
  5. Socket编程模型之完成端口模型

造轮子太费力,造出来的轮子还没现成的开源框架做的稳定和效率高。libuv不仅把windows平台的网络编程模型做好了,而且也把Linux平台的编程模型做好了,这个强大的工具还能用于MacOS平台。编辑libuv源代码的输入库提示libuv封装了WSASetup等接口。基于libuv功能的强大、稳定和丰富可用等优异特点,学习和研究libuv是非常有必要的。

libuv的最新版本是1.21.0,下载地址:https://dist.libuv.org/dist/v1.21.0/libuv-v1.21.0.tar.gz。它的源代码编译起来还是有点麻烦的,它的编译过程需要Python 2.7的运行时环境,还要一个python库:gyp。这个东西是Google做的,源代码、whl包都不在pypi上面,墙内的国内用户瞪圆双眼也无可奈何。我遇到的错误如下图所示:


好在我找到了一个小窍门:

  1. libuv编译文档说明,编译工具支持识别build文件夹下的gyp。
  2. node-gyp自带了gyp源代码。
  3. npmjs.com的访问是畅通无阻的。

我从npmjs.com下载了node-gyp,然后从中提取gyp到libuv源代码下的build文件夹下。于是有了这一幕错误:


错误原因是libuv生成的解决方案平台是Visual Studio 2005,而且生成配置里也没有64位。我用Visual Studio 2017打开解决方案uv.sln,新增x64位编译配置。最终,libuv.lib生成成功,可以拿来用了。

libuv入门

总共只有两个代码文件:main.cpp和Makefile。main.cpp源代码如下:

#include 
#include 

int main(int argc,char** argv)

    uv_loop_t* pnew= uv_loop_new();
    std::cout<<"hello libuv."<<std::endl;
    uv_loop_close(pnew);
    return 0;


Makefile源代码如下:

CFLAGS=/D "_WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_WARNINGS" /D "_UNICODE" /D "UNICODE" 
CPPFLAGS=/D "_WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_WARNINGS" /D "_UNICODE" /D "UNICODE" /I../references/include
LDFLAGS=/LIBPATH:../references/lib
COMMON_LIBS=ws2_32.lib advapi32.lib user32.lib kernel32.lib userenv.lib iphlpapi.lib psapi.lib libuv.lib
COMMON_OBJS=

CONFIGURATION=debug
A01_NAME=a01
A01_OBJS=$(CONFIGURATION)\\main.obj

default: A01_EXE

A01_EXE:
    @if exist $(CONFIGURATION) rd /s /q $(CONFIGURATION)
	@mkdir $(CONFIGURATION)
	@cl /nologo /ZI /EHsc /W3 /MDd /W3 /c $(CPPFLAGS) /Fd:$(CONFIGURATION)\\ /Fo:$(CONFIGURATION)\\ *.cpp
	@link /nologo /DEBUG /MACHINE:X64 /MANIFEST:NO /OUT:$(CONFIGURATION)\\$(A01_NAME).exe /PDB:$(CONFIGURATION)\\$(A01_NAME).pdb /SUBSYSTEM:CONSOLE $(LDFLAGS) $(A01_OBJS) $(COMMON_LIBS)
	@echo generate A01 executable files finished.

clean:
	@if exist $(CONFIGURATION) rd /s /q $(CONFIGURATION)

编译方法:

从开始菜单打开Visual Studio 2017 x64命令行环境,如下图所示:

 

打开之后cd到代码目录下,运行nmake命令即可。生成结果是debug\\a01.exe

以上是关于libuv之64位编译方法和入门示例的主要内容,如果未能解决你的问题,请参考以下文章

libuv编译启动

ubuntu下面编译libuv

Windows下用CMake编译 libuv

Nodejs事件引擎libuv源码剖析之:请求(request)结构的设计剖析

libuv 使用点滴

c_cpp libuv + libopenssl