libuv windows搭建

1 篇文章 0 订阅
1 篇文章 0 订阅

系统准备

windows系统中装有visual studio 软件开发包。
如本教程中使用的平台是:

  • windows 7 旗舰版 x64
  • Microsoft Visual Studio 2013 update

libuv windows平台搭建步骤

  1. 下载libuv:https://github.com/libuv/libuv
    打开gibhub网站后,点击Clone or download按钮后,在弹出的对话框中选择Download ZIP文件。将下载后的文件解压到磁盘中。如本人解压的磁盘为C:/libuv-1.x

  2. 下载gyp https://github.com/turbulenz/gyp 压缩包,在刚解压后的libuv根目录下创建build目录,如C:/libuv-1.x/build

  3. gyp安装需要python环境,下载Python2.x(https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi)安装.
    注意选中注册python的环境变量。

  4. gyp安装:cmd命令行下进入C:/libuv-1.x/build下,执行:setup.py install

  5. libuv安装:执行vcbuild.bat

如系统中安装多个python版本,为避免版本中冲突,可以在命令行下先执行set PYTHON=python2.7版本的可执行文件,如set PYTHON=C:/Python27amd64/python.exe
执行完成后,根libuv根目录下会创建如下的文件:

 
  1. libuv.vcxproj
  2. libuv.vcxproj.filters
  3. run-benchmarks.vcxproj
  4. run-benchmarks.vcxproj.filters
  5. run-tests.vcxproj
  6. run-tests.vcxproj.filters
  7. uv.sln

windows环境下编译

如以上成功,则在libuv根目录下会创建ul.lsn等vs工程文件。如C:/libuv-1.x/uv.sln
使用vs 打开uv.lsn即可以进行debug和release的版本的编译,编译后的文件默认为.lib的静态文件。

  1. 打开uv.sln编译工程,可能需要修改工程的平台工具集和Window SDK版本,并以成功后会生成include目录和Debuglib下的libuv.lib
  2. vs创建Win32 Console工程,把include和libuv.lib复制到根目录下
  3. 包含头文件:右键项目->属性->C/C++->常规的附加包含目录为:include;%(AdditionalIncludeDirectories)
    libuv vs配置

说明
默认的libv的代码生成方式debug为mtd,release为mtd,而我们一般创建的vs工程debug为mtd,release下为mt.所以在编译工程或测试例子时会出现错误。

详见:http://www.bytekits.com/tsingchen/libuv/libuv-windows-build.html
  1. 1>LIBCMTD.lib(invarg.obj) : error LNK2005: __invoke_watson 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  2. 1>LIBCMTD.lib(invarg.obj) : error LNK2005: __set_invalid_parameter_handler 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  3. 1>LIBCMTD.lib(wcstombs.obj) : error LNK2005: _wcstombs 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  4. 1>LIBCMTD.lib(sprintf.obj) : error LNK2005: _sprintf 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  5. 1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __amsg_exit 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  6. 1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __cexit 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  7. 1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __exit 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  8. 1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __initterm_e 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  9. 1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: _exit 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  10. 1>LIBCMTD.lib(wsetloca.obj) : error LNK2005: __configthreadlocale 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  11. 1>LIBCMTD.lib(vsprintf.obj) : error LNK2005: __vscprintf 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  12. 1>LIBCMTD.lib(vsnprnc.obj) : error LNK2005: __vsnprintf_s 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  13. 1>LIBCMTD.lib(dbghook.obj) : error LNK2005: __crt_debugger_hook 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  14. 1>LIBCMTD.lib(winapisupp.obj) : error LNK2005: ___crtSetUnhandledExceptionFilter 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  15. 1>LIBCMTD.lib(winapisupp.obj) : error LNK2005: ___crtTerminateProcess 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  16. 1>LIBCMTD.lib(winapisupp.obj) : error LNK2005: ___crtUnhandledException 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  17. 1>LIBCMTD.lib(dosmap.obj) : error LNK2005: ___doserrno 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  18. 1>LIBCMTD.lib(dosmap.obj) : error LNK2005: __errno 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  19. 1>LIBCMTD.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  20. 1>LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xi_a 已经在 MSVCRT.lib(cinitexe.obj) 中定义
  21. 1>LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xi_z 已经在 MSVCRT.lib(cinitexe.obj) 中定义
  22. 1>LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xc_a 已经在 MSVCRT.lib(cinitexe.obj) 中定义
  23. 1>LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xc_z 已经在 MSVCRT.lib(cinitexe.obj) 中定义
  24. 1>LIBCMTD.lib(winxfltr.obj) : error LNK2005: __XcptFilter 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  25. 1>LIBCMTD.lib(mlock.obj) : error LNK2005: __lock 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  26. 1>LIBCMTD.lib(mlock.obj) : error LNK2005: __unlock 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  27. 1>LIBCMTD.lib(errmode.obj) : error LNK2005: ___set_app_type 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  28. 1>LIBCMTD.lib(_file.obj) : error LNK2005: ___iob_func 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  29. 1>LIBCMTD.lib(osfinfo.obj) : error LNK2005: __get_osfhandle 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  30. 1>LIBCMTD.lib(osfinfo.obj) : error LNK2005: __open_osfhandle 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  31. 1>LIBCMTD.lib(atox.obj) : error LNK2005: _atoi 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  32. 1>LIBCMTD.lib(abort.obj) : error LNK2005: _abort 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
  33. 1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) 已经在 LIBCMTD.lib(typinfo.obj) 中定义
  34. 1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) 已经在 LIBCMTD.lib(typinfo.obj) 中定义
  35. 1>LINK : warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
  36. 1>LINK : warning LNK4098: 默认库“LIBCMTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
  37. 1>C:libuv-1.xDebuglibuvtest.exe : fatal error LNK1169: 找到一个或多个多重定义的符号

所以我们可以在vs的工程/配置属性/C/C++/代码生成的运行库中修改。

关于LIBUV的教程详见:https://www.bytekits.com/libuv/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

站长漫谈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值