- 下載libuv:https://github.com/libuv/libuv
- 下載gyp(https://github.com/turbulenz/gyp)解壓後放在libuv/build下
- gyp安裝需要python環境,下載Python2.x(https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi)安裝並配置環境變量
- gyp安裝:cmd進入libuv/build/gpy下,執行:setup.py install
- libuv安裝:執行vcbuild.bat
@remLook for Visual Studio 2017
if notdefined VS150COMNTOOLS goto vc-set-2013
if notexist "%VS150COMNTOOLS%\..\..\VC\Auxiliary\Build\vcvarsall.bat" gotovc-set-2013
call"%VS150COMNTOOLS%\..\..\VC\Auxiliary\Build\vcvarsall.bat"%vs_toolset%
setGYP_MSVS_VERSION=2017
gotoselect-target
另外libuv\build\gyp\pylib\gyp下的MSVSVersion.py也要增加vs版本
如報Warning:Visual Studio not found,要檢查vs對應版本的環境變量是否已設置,另外vcvarsall.bat所在的位置可能隨版本而不一樣。
設置gyp_uv.py中的vs版本:
os.environ['GYP_MSVS_VERSION'] = '2017'
以上配置好後重新執行vcbuild.bat成功的話會生成對應的工程文件:
libuv.vcxproj
libuv.vcxproj.filters
run-benchmarks.vcxproj
run-benchmarks.vcxproj.filters
run-tests.vcxproj
run-tests.vcxproj.filters
uv.sln
- 打開uv.sln編譯工程,可能需要修改工程的平臺工具集和Window SDK版本,並以成功後會生成include目錄和Debug\lib下的libuv.lib
- vs創建Win32 Console工程,把include和libuv.lib複製到根目錄下
- 包含頭文件:右鍵項目->屬性->C/C++->常規的附加包含目錄爲:include;%(AdditionalIncludeDirectories)
- 測試例子:使用uv_work_t進行cpu密集計算
#include"stdafx.h"
#include"uv.h"
#define FIB_UNTIL 38
uv_loop_t *loop;
longfib_(long t)
{
if(t ==0 || t ==1) return 1;
else return fib_(t -1) +fib_(t -2);
}
voidfib(uv_work_t *req)
{
int n = *(int *)req->data;
long fib =fib_(n);
fprintf(stderr,"%dth fibonacci is %lu\n",n,fib);
}
voidafter_fib(uv_work_t *req,int status)
{
fprintf(stderr,"Done calculating %dth fibonacci\n",*(int *)req->data);
}
int main()
{
loop =uv_default_loop();
int data[FIB_UNTIL];
uv_work_t req[FIB_UNTIL];
for (int i =0; i <FIB_UNTIL; i++) {
data[i] = i;
req[i].data = (void *)&data[i];
uv_queue_work(loop,&req[i],fib,after_fib);
}
return uv_run(loop,UV_RUN_DEFAULT);
}
- 編譯報錯:
- 添加依賴項和忽略LIBCMTD庫:
確保添加了以下幾個依賴項:
libuv.lib
Ws2_32.lib
iphlpapi.lib
Userenv.lib
Psapi.lib
注:如果是編譯x64的要加幾個依賴:
advapi32.lib
iphlpapi.lib
psapi.lib
shell32.lib
userenv.lib
ws2_32.lib
user32.lib
- 再次編譯運行成功輸出: