boost_1.63.0编译VS2013

编译 boost 库的步骤:

  1. 从官网下载最新版本的 boost 库(目前最新版本为:boost_1_63_0);下载地址:http://www.boost.org/users/download/
  2. 解压下载的包(boost_1_63_0.7z)。(假设解压到:F:DownloadChromeoostoost_1_63_0)
  3. 打开 Visual Studio 2013 Tools 之 VS2013 开发人员命令提示 工具
  4. 将目标切换到 F:DownloadChromeoostoost_1_63_0 目标
  5. 执行 bootstrap.bat。执行完成后,会生成:b2.exe、bjam.exe、bootstrap.log、project-config.jam 四个文件,其中 b2.exe 与 bjam.exe 都是用来编译 boost 库的两个工具。它们功能一样,bjam.exe 是老版本的,b2.exe 是升级版本的
  6. 执行 b2 stage --toolset=msvc-12.0 --stagedir="F:DownloadChromeoostoost_1_63_0invc12" link=static runtime-link=shared runtime-link=static threading=multi debug release 执行完成后,会在 F:DownloadChromeoostoost_1_63_0 目标下生成 bin 目录以及 bin.v2 目录。其中 bin 目标是保存最终编译好的各种 lib 库。(命令中的各参数意义,可参阅:http://www.cnblogs.com/zhcncn/p/3950477.html

使用 boost 库步骤:

  1. 将下载解压后的 boost 库包中的 boost 目录(即:F:DownloadChromeoostoost_1_63_0oost 目录)拷贝到工程相应位置处。(如:Boostoost_1_63_0 目录下,即最终:Boostoost_1_63_0oost)。注意:boost 目录为 boost 源文件目录
  2. 将前面编译生成的 binvc12lib 目录下的 lib 库拷贝到工程目录。(如:Jacc.KimJKlibDebug)。提示:Jacc.Kim 目录是个人解决方案所在的目录。注意:binvc12lib 目录下的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 等等。具体需要什么库,在工程链接时,有缺失的话,系统会提示,只需要照着去找到那些需要的库,并拷贝过来即可。
  3. 设置工程:属性 -> 配置属性 -> C/C++ -> 附加包含目录 增加:$(SolutionDir)Boostoost_1_63_0 以及 $(SolutionDir)Boostoost_1_63_0oost
  4. 设置工程:属性 -> 配置属性 -> 链接器 -> 附加库目录 增加 $(SolutionDir)JKlib$(Configuration)。重点说明:此处设置好附加库目录即可,无需像其他静态库那样,还要设置 附加依赖项 中指定具体 libboost_xxx_vc12_-xxx.lib,具体原因,应该是编译时,使用的是 runtime_link=share,即:boost 库间的链接是动态链接的缘故
  5. 之后就可以在工程中使用具体的 boost 库了

编译 boost 库时必需要注意的问题:

  1. 如果编译的是 vs2010 版本的,则目前并没有发现什么问题,使用也正常。按前面的编译命令编译后,所有的 130 多个 lib 库,均全部正确生成
  2. 如果编译的是 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 补丁包。
  3. 如果没有更新 vs2013 update 5 补丁包时,在前面编译完 boost 库后,其实就会提示相应的错误。编译后,也只有其中的部分库被成功编译生成(事实上,只有80个库被正确生成,其他库都编译失败)。一旦出现编译失败,则请先正确更新 update 5 补丁包,然后再删除掉 bin 以及 bin.v2 目录,重新按前面的步骤生成 boost 库然后再使用,避免浪费时间

参考文献:

原文地址:https://www.cnblogs.com/tongy0/p/6513641.html