Libuv是一個多平台支持庫,重點是異步I/O。它主要是由Node.js使用的,但也由Luvit,Julia,Uvloop等人使用。
由Epoll,Kqueue,IOCP,活動端口支持的全功能循環。
異步TCP和UDP插座
異步DNS分辨率
異步文件和文件系統操作
文件系統事件
ANSI逃生代碼控制的TTY
具有插座共享的IPC,使用UNIX域插座或命名管(Windows)
兒童過程
線程池
信號處理
高分辨率時鐘
螺紋和同步原語
從1.0.0版本開始,libuv遵循語義版本操作方案。 API更改和向後兼容性規則是SEMVER指示的規則。 Libuv將在主要版本中保持穩定的ABI。
可以在此處跟踪ABI/API更改。
Libuv獲得了MIT許可證的許可。檢查許可證和許可證文件。
該文檔是根據CC劃分的4.0許可證的。檢查許可證文件。
位於文檔/子目錄中。它使用Sphinx框架,這使得可以以多種格式構建文檔。
顯示不同支持的建築選擇:
$ make help將文檔構建為HTML:
$ make html將文檔構建為HTML,並在更改時將其重新加載(這需要安裝Sphinx-Autobuild,並且僅在UNIX上支持):
$ make livehtml將文檔作為人類頁面構建:
$ make man將文檔構建為EPUB:
$ make epub注意:Windows用戶需要使用make.bat而不是普通的“ make”。
文檔可以在此處在線瀏覽。
測試和基準也可以用作API規範和使用示例。
這些資源不是由Libuv維護者處理的,可能已經過時了。請在打開新問題之前對其進行驗證。
可以從GitHub存儲庫或下載網站下載Libuv。
在驗證GIT標籤或簽名文件之前,需要導入相關密鑰。密鑰ID在維護器文件中列出,但也可以作為git blob對象可用,以易於使用。
以通常的方式導入鑰匙:
$ gpg --keyserver pool.sks-keyservers.net --recv-keys AE9BC059從git blob對象導入鍵:
$ git show pubkey-saghul | gpg --importGIT標籤與開發人員的密鑰簽名,可以驗證如下:
$ git verify-tag v1.6.1從Libuv 1.7.0開始,簽署了存儲在下載站點中的TARBALLS,並隨附一個隨附的簽名文件。一旦下載了發布tarball和簽名文件,就可以驗證該文件如下:
$ gpg --verify libuv-1.7.0.tar.gz.sign對於包括MacOS在內的Unix狀平台,有兩種構建方法:自動工具或CMAKE。
對於Windows,Cmake是唯一受支持的構建方法,並且具有以下先決條件:
PATH的工具。使用自動工具構建:
$ sh autogen.sh
$ ./configure
$ make
$ make check
$ make install用cmake構建:
$ mkdir -p build
$ (cd build && cmake .. -DBUILD_TESTING=ON) # generate project with tests
$ cmake --build build # add `-j <n>` with cmake >= 3.12
# Run tests:
$ (cd build && ctest -C Debug --output-on-failure)
# Or manually run tests:
$ build/uv_run_tests # shared library build
$ build/uv_run_tests_a # static library build與CMAKE交叉編譯(不支持但通常有效):
$ cmake ../..
-DCMAKE_SYSTEM_NAME=Windows
-DCMAKE_SYSTEM_VERSION=6.1
-DCMAKE_C_COMPILER=i686-w64-mingw32-gcc$ brew install --HEAD libuv注意OS X用戶:
確保您指定要在“ Archs”標誌中構建的體系結構。您可以通過使用空間進行劃界(例如“ x86_64 i386”)來指定多個。
$ git clone https://github.com/microsoft/vcpkg.git
$ ./bootstrap-vcpkg.bat # for powershell
$ ./bootstrap-vcpkg.sh # for bash
$ ./vcpkg install libuv您可以為libuv安裝預製的二進製文件,也可以使用柯南(Conan)來構建它。使用以下命令:
conan install --requires= " libuv/[*] " --build=missing柯南維護者和社區貢獻者保持了Libuv Conan食譜的最新狀態。如果該版本已過時,請在ConancentErindex存儲庫上創建問題或提取請求。
一些測試對正時敏感。在緩慢或超載機器上可能需要放鬆測試超時:
$ env UV_TEST_TIMEOUT_MULTIPLIER=2 build/uv_run_tests # 10s instead of 5s 所有測試的列表都在test/test-list.h中。
此調用將導致測試驅動程序在子過程中叉和執行TEST_NAME :
$ build/uv_run_tests_a TEST_NAME此調用將導致測試驅動程序在同一過程中執行測試:
$ build/uv_run_tests_a TEST_NAME TEST_NAME從測試驅動程序過程中運行測試( build/uv_run_tests_a TEST_NAME TEST_NAME )時,諸如GDB和Valgrind之類的工具正常工作。
從測試驅動程序過程的孩子( build/uv_run_tests_a TEST_NAME )運行測試時,以叉子感知方式使用這些工具。
使用下面的fork模式設置:
$ gdb --args build/uv_run_tests_a TEST_NAME
(gdb) set follow-fork-mode child
...
使用--trace-children=yes參數:
$ valgrind --trace-children=yes -v --tool=memcheck --leak-check=full --track-origins=yes --leak-resolution=high --show-reachable=yes --log-file=memcheck-%p.log build/uv_run_tests_a TEST_NAME請參閱有關運行測試的部分。基準驅動程序為./uv_run_benchmarks_a ,基准在test/benchmark-list.h中列出。
檢查支持的_platforms文件。
-fno-strict-aliasing建議在使用libuv的項目中打開-fno-strict-aliasing compiler Flag。在存在依賴嚴格混溶的編譯器優化的情況下,在Libuv API中使用臨時“繼承”可能是不安全的。
MSVC沒有等效的標誌,但在撰寫本文時也不需要它。 (2019年12月)。
使用IBM XL C/C ++的AIX彙編需要12.1版或更高版本。
AIX對文件系統事件的支持要求安裝非默認IBM bos.ahafs軟件包。該軟件包提供了autoconf檢測到的AIX事件基礎架構。 IBM文檔更詳細地描述了該軟件包。
Z/OS彙編需要安裝Zoslib。使用CMAKE構建時,使用標誌-DZOSLIB_DIR指定通往Zoslib的路徑:
$ (cd build && cmake .. -DBUILD_TESTING=ON -DZOSLIB_DIR=/path/to/zoslib)
$ cmake --build buildZ/OS創建系統V信號量和消息隊列。除非事件循環關閉,否則這些過程終止後系統持續在系統上。
使用ipcrm命令手動清除系統V資源。
請參閱有關貢獻的指南。