系统准备
windows系统中装有visual studio 软件开发包。
如本教程中使用的平台是:
- windows 7 旗舰版 x64
- Microsoft Visual Studio 2013 update
libuv windows平台搭建步骤
-
下载libuv:https://github.com/libuv/libuv
打开gibhub网站后,点击Clone or download按钮后,在弹出的对话框中选择Download ZIP文件。将下载后的文件解压到磁盘中。如本人解压的磁盘为C:/libuv-1.x。 -
下载gyp https://github.com/turbulenz/gyp 压缩包,在刚解压后的libuv根目录下创建build目录,如
C:/libuv-1.x/build -
gyp安装需要python环境,下载Python2.x(https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi)安装.
注意选中注册python的环境变量。 -
gyp安装:cmd命令行下进入
C:/libuv-1.x/build下,执行:setup.py install - libuv安装:执行vcbuild.bat
如系统中安装多个python版本,为避免版本中冲突,可以在命令行下先执行set PYTHON=python2.7版本的可执行文件,如set PYTHON=C:/Python27amd64/python.exe
执行完成后,根libuv根目录下会创建如下的文件:
libuv.vcxprojlibuv.vcxproj.filtersrun-benchmarks.vcxprojrun-benchmarks.vcxproj.filtersrun-tests.vcxprojrun-tests.vcxproj.filtersuv.sln
windows环境下编译
如以上成功,则在libuv根目录下会创建ul.lsn等vs工程文件。如C:/libuv-1.x/uv.sln
使用vs 打开uv.lsn即可以进行debug和release的版本的编译,编译后的文件默认为.lib的静态文件。
- 打开uv.sln编译工程,可能需要修改工程的平台工具集和Window SDK版本,并以成功后会生成include目录和Debuglib下的libuv.lib
- vs创建Win32 Console工程,把include和libuv.lib复制到根目录下
- 包含头文件:右键项目->属性->C/C++->常规的附加包含目录为:include;%(AdditionalIncludeDirectories)
说明
默认的libv的代码生成方式debug为mtd,release为mtd,而我们一般创建的vs工程debug为mtd,release下为mt.所以在编译工程或测试例子时会出现错误。
详见:http://www.bytekits.com/tsingchen/libuv/libuv-windows-build.html
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)" ([email protected]@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 &)" ([email protected]@[email protected]@@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 &)" ([email protected]@[email protected]@@Z) 已经在 LIBCMTD.lib(typinfo.obj) 中定义1>LINK : warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library1>LINK : warning LNK4098: 默认库“LIBCMTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library1>C:libuv-1.xDebuglibuvtest.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
所以我们可以在vs的工程/配置属性/C/C++/代码生成的运行库中修改。
字节流(www.bytekits.com.com)提供了编程的基础技术教程, 介绍了关于我们,工具软件,Bochs,Duilib,bat批处理,正则表达式,C/C++技巧,Linux命令,ARP,SQL,硬盘MBR分区,FAT文件系统,NTFS文件系统,ReactOS,Nasm,BIOS,IDA Pro,Windbg,C++11,Windows功能编程,Windows消息,libuv,http,gcc,cef,Sqlite,WebKit,CentOS7运维,我的技术博客,Windows内核调试,USB学习笔记,UVC,春风博文,FC协议详解,礼仪规范,SQL经典语句大全,硬件接口,随手笔记,WindowsAPI函数,Linux驱动基础,FPGA环境搭建,FPGA任务函数,VBScript,FPGA爬坑行,Docker教程,等各种编程语言的基础知识。 同时本站中也提供了大量的在线实例,通过实例,您可以更好的学习编程