vs2017下搭建libuv环境

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/monitor1394/article/details/77734769

 

  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. 再次编译运行成功输出:
 

 

 


posted on 2018-12-03 15:22  &大飞  阅读(1524)  评论(0编辑  收藏  举报

导航