vs2017下搭建libuv環境

  1. 下載libuvhttps://github.com/libuv/libuv
  2. 下載gyp(https://github.com/turbulenz/gyp解壓後放在libuv/build
  3. gyp安裝需要python環境,下載Python2.x(https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi安裝並配置環境變量
  4. gyp安裝:cmd進入libuv/build/gpy下,執行:setup.py install
  5. libuv安裝:執行vcbuild.bat
    如cmd一閃而過的問題,打開vcbuild.bat檢查是否有對應的vs版本,沒有則加上,如我用的vs2017需要加上配置:

@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

  1. 打開uv.sln編譯工程,可能需要修改工程的平臺工具集和Window SDK版本,並以成功後會生成include目錄和Debug\lib下的libuv.lib
  2. vs創建Win32 Console工程,把includelibuv.lib複製到根目錄下
  3. 包含頭文件:右鍵項目->屬性->C/C++->常規的附加包含目錄爲:include;%(AdditionalIncludeDirectories)


  1. 測試例子:使用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);
    }
  1. 編譯報錯:

  1. 添加依賴項和忽略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
  1. 再次編譯運行成功輸出:

 

 


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