libuv 在win10 vs各个版本编译静态库
来源:互联网 发布:mac 磁盘图标 名称 编辑:程序博客网 时间:2024/06/17 22:34
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:\gitgit clone https://github.com/libuv/libuv.gitcd libuvgit tag #查看稳定版本,当前2016-12-30 稳定版本v1.9.1git 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.vcxprojlibuv.vcxproj.filtersrun-benchmarks.vcxprojrun-benchmarks.vcxproj.filtersrun-tests.vcxprojrun-tests.vcxproj.filtersuv.sln
安装对应vs版本后,命令提示符cmd窗口运行如下命令,可生成对应版本的工程文件。
# 如果要支持xp,记得修改common.gypi。添加'msbuild_toolset': 'v140_xp', # VS2015# 01 vs2015的x86版本set GYP_MSVS_VERSION=2015gyp_uv.py -Dtarget_arch=x32# 02 vs2015的x64版本set GYP_MSVS_VERSION=2015gyp_uv.py -Dtarget_arch=x64# 如果要支持xp,记得修改common.gypi。添加'msbuild_toolset': 'v120_xp', # VS2013# 03 vs2013的x86版本set GYP_MSVS_VERSION=2013gyp_uv.py -Dtarget_arch=x32# 04 vs2013的x64版本set GYP_MSVS_VERSION=2013gyp_uv.py -Dtarget_arch=x64# 如果要支持xp,记得修改common.gypi。添加'msbuild_toolset': 'v110_xp', # VS2012# 05 vs2012的x86版本set GYP_MSVS_VERSION=2012gyp_uv.py -Dtarget_arch=x32# 06 vs2012的x64版本set GYP_MSVS_VERSION=2012gyp_uv.py -Dtarget_arch=x64# 07 vs2010的x86版本set GYP_MSVS_VERSION=2010gyp_uv.py -Dtarget_arch=x32# 08 vs2010的x64版本set GYP_MSVS_VERSION=2010gyp_uv.py -Dtarget_arch=x64# 09 vs2008的x86版本set GYP_MSVS_VERSION=2008gyp_uv.py -Dtarget_arch=x32# 10 vs2008的x64版本set GYP_MSVS_VERSION=2008gyp_uv.py -Dtarget_arch=x64# 11 vs2005的x86版本set GYP_MSVS_VERSION=2005gyp_uv.py -Dtarget_arch=x32# 12 vs2005的x64版本set GYP_MSVS_VERSION=2005gyp_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工程。
- libuv 在win10 vs各个版本编译静态库
- 在VS中使用命令行中编译静态库
- linux下编译libuv库
- VS 2010 静态库编译
- vs qt静态库编译
- FreeCAD各个编译版本
- Win10各个版本免费激活密钥
- windows下使用vs2008编译libuv库
- lua5.3.3 vs 编译 静态库
- VS 静态编译QT
- VS编译静态链接
- VS 设置静态编译
- VS静态编译
- 在本机使用不同版本VS编译boost
- 在Windows下编译多种VS版本的Skia
- 在Windows下编译多种VS版本的Skia
- 各个版本的VS提升管理员权限
- VS创建的exe文件在xp及win10等版本运行错误的问题
- 调用android的Camera 执行结果没有回调onActivityResult()
- Transition-based Parsing 简介
- 利用双缓冲技术解决图像闪烁
- 06原型模式
- ios openssl rsa 加密问题
- libuv 在win10 vs各个版本编译静态库
- ant 打包android工程 的问题
- JSON 取值,麻烦大家帮我看看!
- 创建Qt项目之02(手动创建)
- go range
- 2016的最后一天
- 点击imageview跳转到另一个页面
- 【JZOJ 3808】 道路值守
- Dev-C++中使用EGE图形库