01 环境
libuv使用git管理代码,使用gyp管理工程文件。git、python2.x必须。
环境描述:
win10x64企业版本(10.0.14393),
vs2005–vs2015,
python2.7.6,
git(version 1.9.5.chromium.6)。
git和python建议使用更高版本。
因为下载gyp管理工具需求翻墙,需要vpn。自己有美国的vps,可以自己搭建。
官网:http://libuv.org/
github源码:https://github.com/libuv/libuv
02 源码下载
命令提示符窗口输入:
1 2 3 4 5 |
cd d:\git git clone https://github.com/libuv/libuv.git cd libuv git tag #查看稳定版本,当前2016-12-30 稳定版本v1.9.1 git checkout v1.9.1 -b b1.9.1 # 迁出稳定版本,并建立新分支b1.9.1 |
03 编译源码
03.01 获取gyp工具链
命令行提示符窗口运行vcbuild.bat,将会获得gyp工具链。
1 |
vcbuild.bat |
这一布需要vpn翻墙。从vcbuild.bat脚本可以看到git clone https://chromium.googlesource.com/external/gyp build/gyp。gyp是从googlesource下载的。下载到当前目录的build子目录下。
03.02 指定使用visualStudio版本
从gyp_uv.py文件中,可以看到GYP_MSVS_VERSION这个环境变量。这是指定使用什么vs版本的。通过在命令行设置这个环境变量,指定使用系统那个vs版本。
在命令行提示符设置环境变量,设置2005到2015等,均可。
1 |
set GYP_MSVS_VERSION=2015 |
03.03 指定目标版本架构
从gyp_uv.py文件中,可以看到有-Dtarget_arch参数,这个是指定生成的项目是32位还是64位的。需要在命令行中指定,默认使用64位。
类似:
1 2 |
gyp_uv.py -Dtarget_arch=x32 # 目标文件32位 gyp_uv.py -Dtarget_arch=x64 # 目标文件64位 |
03.04 指定目标版本支持xp系统
如果需要支持xp系统,对于vs2012以后的版本,需要特殊指定平台工具集。即visual studio 工程的配置属性==>常规==>平台工具集选择对xp系统的支持。v140_xp(vs2015),v120_xp(vs2013),v110_xp(vs2012)。
这个属性可以在gyp文件重配置。可以配置到common.gypi中。因为每个工程都引用common.gypi。
在 common.gypi 的line86 附近加入编译对xp版本的支持。
在【’msvs_settings’: 】行前面,与msvs_settings同级。
1 2 3 |
'msbuild_toolset': 'v140_xp', # VS2015 #'msbuild_toolset': 'v120_xp', # VS2013 #'msbuild_toolset': 'v110_xp', # VS2012 |
03.05 生成vs工程文件
使用gyp_uv.py生成工程文件,生成的工程和sln文件都在当前目录。共有7个。再次生成时,会覆盖已有文件。
1 2 3 4 5 6 7 |
libuv.vcxproj libuv.vcxproj.filters run-benchmarks.vcxproj run-benchmarks.vcxproj.filters run-tests.vcxproj run-tests.vcxproj.filters uv.sln |
安装对应vs版本后,命令提示符cmd窗口运行如下命令,可生成对应版本的工程文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# 如果要支持xp,记得修改common.gypi。添加 'msbuild_toolset': 'v140_xp', # VS2015 # 01 vs2015的x86版本 set GYP_MSVS_VERSION=2015 gyp_uv.py -Dtarget_arch=x32 # 02 vs2015的x64版本 set GYP_MSVS_VERSION=2015 gyp_uv.py -Dtarget_arch=x64 # 如果要支持xp,记得修改common.gypi。添加 'msbuild_toolset': 'v120_xp', # VS2013 # 03 vs2013的x86版本 set GYP_MSVS_VERSION=2013 gyp_uv.py -Dtarget_arch=x32 # 04 vs2013的x64版本 set GYP_MSVS_VERSION=2013 gyp_uv.py -Dtarget_arch=x64 # 如果要支持xp,记得修改common.gypi。添加 'msbuild_toolset': 'v110_xp', # VS2012 # 05 vs2012的x86版本 set GYP_MSVS_VERSION=2012 gyp_uv.py -Dtarget_arch=x32 # 06 vs2012的x64版本 set GYP_MSVS_VERSION=2012 gyp_uv.py -Dtarget_arch=x64 # 07 vs2010的x86版本 set GYP_MSVS_VERSION=2010 gyp_uv.py -Dtarget_arch=x32 # 08 vs2010的x64版本 set GYP_MSVS_VERSION=2010 gyp_uv.py -Dtarget_arch=x64 # 09 vs2008的x86版本 set GYP_MSVS_VERSION=2008 gyp_uv.py -Dtarget_arch=x32 # 10 vs2008的x64版本 set GYP_MSVS_VERSION=2008 gyp_uv.py -Dtarget_arch=x64 # 11 vs2005的x86版本 set GYP_MSVS_VERSION=2005 gyp_uv.py -Dtarget_arch=x32 # 12 vs2005的x64版本 set GYP_MSVS_VERSION=2005 gyp_uv.py -Dtarget_arch=x64 |
注意:
A:每次执行gyp_uv.py都会覆盖前次运行结果。
B:使用vs2015 可以通过指定v120_xp v110_xp 代替vs2013和vs2012编译。
03.06 vs编译libuv静态库
使用对应版本visual studio 打开对应 使用gyp_uv.py生成的 uv.sln 文件,选择debug或release版本,编译,会在当期的目录下,生成debug目录和release目录及对应的libuv.lib文件。
把 include 目录,和对应的libuv.lib文件拷贝到自己工程指定位置,即可以使用libub库功能。
03.07 问题
在win10x64 编译x86版本时,run-benchmarks和run-tests测试工程会报错,x64为版本没问题。
错误如下:
1 2 3 |
tty.c(468): warning C4013: “InterlockedOr”未定义;假设外部返回 int 测试程序用到这个函数相关的调用,出现链接错误 libuv.lib(tty.obj) : error LNK2001: 无法解析的外部符号 _InterlockedOr |
03.08 工程文件存档
为了避免再次翻墙,把对应的工程文件和gyp工具链保存到github上面。
地址:https://github.com/5455945/libuv
在分支b1.9.1上(https://github.com/5455945/libuv/tree/b1.9.1)。
这个分支已经包含了gyp工具链,下载下来可以直接使用gyp_uv.py生成vs工程。
发表评论
要发表评论,您必须先登录。