Libuv教程
+ -

Libuv windows搭建

2019-09-09 0 0

系统准备

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

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

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根目录下会创建如下的文件:

libuv.vcxproj
libuv.vcxproj.filters
run-benchmarks.vcxproj
run-benchmarks.vcxproj.filters
run-tests.vcxproj
run-tests.vcxproj.filters
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.所以在编译工程或测试例子时会出现错误。

1>LIBCMTD.lib(invarg.obj) : error LNK2005: __invoke_watson 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(invarg.obj) : error LNK2005: __set_invalid_parameter_handler 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(wcstombs.obj) : error LNK2005: _wcstombs 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(sprintf.obj) : error LNK2005: _sprintf 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __amsg_exit 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __cexit 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __exit 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __initterm_e 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: _exit 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(wsetloca.obj) : error LNK2005: __configthreadlocale 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(vsprintf.obj) : error LNK2005: __vscprintf 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(vsnprnc.obj) : error LNK2005: __vsnprintf_s 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(dbghook.obj) : error LNK2005: __crt_debugger_hook 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(winapisupp.obj) : error LNK2005: ___crtSetUnhandledExceptionFilter 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(winapisupp.obj) : error LNK2005: ___crtTerminateProcess 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(winapisupp.obj) : error LNK2005: ___crtUnhandledException 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(dosmap.obj) : error LNK2005: ___doserrno 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(dosmap.obj) : error LNK2005: __errno 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xi_a 已经在 MSVCRT.lib(cinitexe.obj) 中定义
1>LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xi_z 已经在 MSVCRT.lib(cinitexe.obj) 中定义
1>LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xc_a 已经在 MSVCRT.lib(cinitexe.obj) 中定义
1>LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xc_z 已经在 MSVCRT.lib(cinitexe.obj) 中定义
1>LIBCMTD.lib(winxfltr.obj) : error LNK2005: __XcptFilter 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(mlock.obj) : error LNK2005: __lock 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(mlock.obj) : error LNK2005: __unlock 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(errmode.obj) : error LNK2005: ___set_app_type 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(_file.obj) : error LNK2005: ___iob_func 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(osfinfo.obj) : error LNK2005: __get_osfhandle 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(osfinfo.obj) : error LNK2005: __open_osfhandle 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(atox.obj) : error LNK2005: _atoi 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
1>LIBCMTD.lib(abort.obj) : error LNK2005: _abort 已经在 MSVCRT.lib(MSVCR120.dll) 中定义
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) 中定义
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) 中定义
1>LINK : warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
1>LINK : warning LNK4098: 默认库“LIBCMTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
1>C:libuv-1.xDebuglibuvtest.exe : fatal error LNK1169: 找到一个或多个多重定义的符号

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

0 篇笔记 写笔记

Libuv windows搭建
系统准备windows系统中装有visual studio 软件开发包。如本教程中使用的平台是:windows 7 旗舰版 x64Microsoft Visual Studio 2013 update5libuv windows平台搭建步骤下载libuv:https://github.com/lib......
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!