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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章