boost_1.63.0编译VS2013
编译 boost 库的步骤:
- 从官网下载最新版本的 boost 库(目前最新版本为:boost_1_63_0);下载地址:http://www.boost.org/users/download/
- 解压下载的包(boost_1_63_0.7z)。(假设解压到:F:\Download\Chrome\boost\boost_1_63_0)
- 打开 Visual Studio 2013 Tools 之 VS2013 开发人员命令提示 工具
- 将目标切换到 F:\Download\Chrome\boost\boost_1_63_0 目标
- 执行 bootstrap.bat。执行完成后,会生成:b2.exe、bjam.exe、bootstrap.log、project-config.jam 四个文件,其中 b2.exe 与 bjam.exe 都是用来编译 boost 库的两个工具。它们功能一样,bjam.exe 是老版本的,b2.exe 是升级版本的
- 执行 b2 stage --toolset=msvc-12.0 --stagedir="F:\Download\Chrome\boost\boost_1_63_0\bin\vc12" link=static runtime-link=shared runtime-link=static threading=multi debug release 执行完成后,会在 F:\Download\Chrome\boost\boost_1_63_0 目标下生成 bin 目录以及 bin.v2 目录。其中 bin 目标是保存最终编译好的各种 lib 库。(命令中的各参数意义,可参阅:http://www.cnblogs.com/zhcncn/p/3950477.html)
使用 boost 库步骤:
- 将下载解压后的 boost 库包中的 boost 目录(即:F:\Download\Chrome\boost\boost_1_63_0\boost 目录)拷贝到工程相应位置处。(如:Boost\boost_1_63_0 目录下,即最终:Boost\boost_1_63_0\boost)。注意:boost 目录为 boost 源文件目录
- 将前面编译生成的 bin\vc12\lib 目录下的 lib 库拷贝到工程目录。(如:Jacc.Kim\JK\lib\Debug)。提示:Jacc.Kim 目录是个人解决方案所在的目录。注意:bin\vc12\lib 目录下的100多个lib文件中并不需要全部拷贝,只需要拷贝自己工程需要用到的库即可。比如:如果只想使用 date_time 库,则只需要拷贝:libboost_date_time-vc120-mt-gd-1_63.lib 库即可。但是有些库是有依赖于其他的一些库的,此时,将需要将那些依赖的库一并拷贝过来。比如:asio 则依赖于 libboost_system-vc120-mt-gd-1_63.lib 库,如果在使用 asio 时,有用到 regex,则还需要拷贝:libboost_regex-vc120-mt-gd-1_63.lib。如果有用到多线程,则还需要:libboost_thread-vc120-mt-gd-1_63.lib、libboost_chrono-vc120-mt-gd-1_63.lib 等等。具体需要什么库,在工程链接时,有缺失的话,系统会提示,只需要照着去找到那些需要的库,并拷贝过来即可。
- 设置工程:属性 -> 配置属性 -> C/C++ -> 附加包含目录 增加:$(SolutionDir)Boost\boost_1_63_0 以及 $(SolutionDir)Boost\boost_1_63_0\boost
- 设置工程:属性 -> 配置属性 -> 链接器 -> 附加库目录 增加 $(SolutionDir)JK\lib\$(Configuration)。重点说明:此处设置好附加库目录即可,无需像其他静态库那样,还要设置 附加依赖项 中指定具体 libboost_xxx_vc12_-xxx.lib,具体原因,应该是编译时,使用的是 runtime_link=share,即:boost 库间的链接是动态链接的缘故
- 之后就可以在工程中使用具体的 boost 库了
编译 boost 库时必需要注意的问题:
- 如果编译的是 vs2010 版本的,则目前并没有发现什么问题,使用也正常。按前面的编译命令编译后,所有的 130 多个 lib 库,均全部正确生成
- 如果编译的是 vs2013 版本的,则请确保有更新 vs2013 update 5 补丁包。如果没有更新该补丁包,则只有其中的部分 lib 库可以使用,有些库则有可能使用过程中会出现(自己的)工程编译不过的情况。比如:在未更新 update 5 补丁包时,使用 date_time 库时,可正常使用。使用 asio 功能时,如果用到 boost::asio::write() 功能时,则会出现 common_type.hpp 编译不过。提示:msc1.cpp 第 1325 行编译不过。稍微查看一下 common_type.hpp 中的源码,大致就能明白问题原因在于:编译时,使用了 c++11 新特性之可变模板参数特性,说明:如果没更新 vs2013 update 5 则编译器对 c++11 新特性的功能支持并不全面。因此需要更新 update 5 补丁包。
- 如果没有更新 vs2013 update 5 补丁包时,在前面编译完 boost 库后,其实就会提示相应的错误。编译后,也只有其中的部分库被成功编译生成(事实上,只有80个库被正确生成,其他库都编译失败)。一旦出现编译失败,则请先正确更新 update 5 补丁包,然后再删除掉 bin 以及 bin.v2 目录,重新按前面的步骤生成 boost 库然后再使用,避免浪费时间
参考文献:
- http://www.cnblogs.com/zhcncn/p/3950477.html
- http://www.cnblogs.com/myart/p/4223451.html
- http://www.cnblogs.com/wondering/archive/2009/05/21/boost_setup.html
- common_type.hpp 编译不过问题解决参考:http://www.cnblogs.com/darkknightzh/p/5394236.html
boost_1.63.0编译VS2013的更多相关文章
- boost_1.61.0编译安装
1.下载源码boost_1_61_0.zip 2.进入目录 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shor ...
- Qt 5.6.0 动态编译(VS2013 x86 target xp openssl icu webkit)
经历了多次延期后,在3月16号,Qt发布了5.6.0版本(全面支持高DPI无疑是一个亮点),从5.6.0版本开始,Qt直接移除了webkit模块,让webengine作为其替代选择,不过webengi ...
- win10+VS2015+boost_1.60.0
安装boost库的初衷boost库是一个C++'准'标准库,对于一个C++程序员来说,了解强大的boost库是很有必要的.当然,在学习使用这样一个强大的库之前,首先要学会安装.本文讲述了boost_1 ...
- Cocos2D-x-3.0 编译(Win7)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/logotostudent/article/details/25425969 第一次開始用手游引擎挺激 ...
- CentOS 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14
准备篇: CentOS 7.0系统安装配置图解教程 http://www.osyunwei.com/archives/7829.html 一.配置防火墙,开启80端口.3306端口 CentOS 7. ...
- centos 7.0 编译安装php 7.0.3
php下载页面 http://cn2.php.net/downloads.php 7.0.3多地区下载页面 http://cn2.php.net/get/php-7.0.3.tar.gz/from/a ...
- Valgrind 3.11.0编译安装
Valgrind 3.11.0编译安装 Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind遵守GNU通用公共许可证条款,是一款自由软件. 到3.3.0版本为 ...
- android5.0 编译
android5.0编译需要jdk1.7版本,将来本地可能需要同时维护两套jdk版本,请参考: 在线安装openjdk1.7 sudo apt-get install openjdk-7-jre op ...
- VC6.0编译boost
今天学习了下VC6.0下boost的编译,只是对regex进行了编译,据说全部编译需要2个多小时,在此记录下学习过程中遇到的问题以便今后查看. 最开始直接从网上(www.boost.org)下载了当前 ...
随机推荐
- arduino 用电位器调节LED闪烁频率
int dianwei; int led = 13; void setup() { // put your setup code here, to run once: Serial.begin(9 ...
- mysql中的enum型
enum设置后 值只能是给出的值中的其中一个 mysql> create table enum(e enum('1','2','3','4','5','6','7','8','9','10')) ...
- Python标准库笔记(4) — collections模块
这个模块提供几个非常有用的Python容器类型 1.容器 名称 功能描述 OrderedDict 保持了key插入顺序的dict namedtuple 生成可以使用名字来访问元素内容的tuple子类 ...
- C++ 输入ctrl+z 不能再使用cin的问题
问题介绍: 程序步骤是开始往容器里面写数据,以Ctrl+Z来终止输入流,然后需要输入一个数据,来判断容器中是否有这个数据. 源代码如下: #include<iostream> #inclu ...
- JS怎么刷新当前页面
JS怎么刷新当前页面 reload 方法,该方法强迫浏览器刷新当前页面.语法:location.reload([bForceGet]) 参数: bForceGet, 可选参数, 默认为 false,从 ...
- iframe子页面获取父页面元素和window对象
项目中发现要在iframe的弹框中获取父页面中的元素,我们可以按照如下代码操作:$(window.parent.document).find('selector').attr('XXX') 如果我们需 ...
- Leetcode 之Longest Palindromic Substring(30)
很经典的一道题,最长回文子串,有多种方法. 首先介绍的一种方法是从中间向两边展开.注意区分aba和abba型的回文串:如果当前最长的子串已经当于两边中最长的子串了,则无需再去判断. //从中间向两边展 ...
- 获取GUID的方法
uses QString; procedure TForm12.btn1Click(Sender: TObject); var g: TGUID; begin //方法1(Guid的Helper)-- ...
- chain模块将两个列表合并
示例代码 from itertools import chain v1 = [11,22,33] v2 = ['a','b','c'] for item in chain(v1,v2): print( ...
- jenkins上展示html报告【转载】
转至博客:上海-悠悠 前言 在jenkins上展示html的报告,需要添加一个HTML Publisher plugin插件,把生成的html报告放到指定文件夹,这样就能用jenkins去读出指定文件 ...