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

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