libuv 在win10 vs各个版本编译静态库
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,可以
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,可以自己搭建。我使用的是腾讯的cvm服务。参考《腾讯 cvm 搭建 vpn》
http://blog.csdn.net/longji/article/details/53032460。
官网:http://libuv.org/
github源码:https://github.com/libuv/libuv
02 源码下载
命令提示符窗口输入:
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工具链。
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等,均可。
set GYP_MSVS_VERSION=2015
03.03 指定目标版本架构
从gyp_uv.py文件中,可以看到有-Dtarget_arch参数,这个是指定生成的项目是32位还是64位的。需要在命令行中指定,默认使用64位。
类似:
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同级。
'msbuild_toolset': 'v140_xp', # VS2015
#'msbuild_toolset': 'v120_xp', # VS2013
#'msbuild_toolset': 'v110_xp', # VS2012
03.05 生成vs工程文件
使用gyp_uv.py生成工程文件,生成的工程和sln文件都在当前目录。共有7个。再次生成时,会覆盖已有文件。
libuv.vcxproj
libuv.vcxproj.filters
run-benchmarks.vcxproj
run-benchmarks.vcxproj.filters
run-tests.vcxproj
run-tests.vcxproj.filters
uv.sln
安装对应vs版本后,命令提示符cmd窗口运行如下命令,可生成对应版本的工程文件。
# 如果要支持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为版本没问题。
错误如下:
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工程。
更多推荐
所有评论(0)