虽然很多Boost组件都只有头文件,不需要编译,但是有些Boost组件,如program_options、regex等还是需要编译生成库的。考虑到目前的程序需要用到program_options、regex等组件,还可能用到filesystem组件,所以还是决定先把Boost编译一下。

  习惯性的找Boost某个组件或者整个Boost的*.dsp或者*.sln文件,没找到。于是只好老老实实地去看文档,Getting Started on Windows一节有说,需要获得bjam。得,先编译bjam吧。好在bjam的源码也在Boost源码包中,不需要特别去下载。

  进入tools/jam目录(习惯用/来表示目录分隔,写起来方便),一眼就看见了,build_dist.bat,运行它当然是可以得到bjam.exe的,但是貌似这个批处理还干了些其它的事情,所以还是根据各方面的资料,再进入stage目录,找到build.bat来运行。这个批处理还算聪明,居然能自己配置VC的相关路径。

  跑tools/jam/stage/build.bat没遇到啥问题。结果在stage下面产生了bin.ntx86和boost-jam-3.1.17-1-ntx86等目录——如果jam版本不一样,举一反三。这两个目录下都有bjam.exe,一样的,不过看起来,boost-jam-3.1.17-1-ntx86目录更像是发行目录,因为这里面只有bjam.exe和license说明。我本来也不准备要改PATH环境,所以随便找一个bjam.exe拷贝到boost主目录下去,准备编译。

  有了bjam之后要编译boost就简单了,直接到命令行下运行bjam就OK(貌似不到命令行下直接双击运行也行)。不过这样据说会编译全部boost库和N种配置,费时还浪费磁盘空间。我只会用到上面说的三个组件,只编译那三个组件,每个两种配置(debug一种,release一种)就好。为了省时省空间,就费点力自己写几个命令吧。运行个bjam --help,看看命令行是咋个写的:

Usage:
bjam [options] [properties] [install|stage]

  命令行道是简单,就是选项+属性+目标。目标就两个install和stage,其中install根据指定的安装目录,把头文件和编译出来的.lib都拷贝过去——浪费空间,就选stage吧,默认就是,都不用特别指定了。

  选项用默认的也行,有几个属性可能需要修改:

  1. --with-<library>,这个选项指定需要编译的组件。如果不指定,就是编译全部Boost库。其中<library>就是Boost主目录下libs目录中的子目录名。比如编译正则表达式库这个选项设置为:--with-regex。

  2. --stagedir=<dir>,这个选项指定编译的结果拷贝到哪里。bjam会把编译生成的*.lib和*.dll拷贝到指定目录下的lib目录。默认是Boost主目录下的stage目录。其实,就用默认值挺好的。

  3. --build-type=complate,意思是尝试所有可能的组合,比如多线程静态,多线程DLL等。在使用--with参数指定了组件的情况下,使用这个选项可以少些配置。不过编译出来的东西还是很可观,一个组件的这些库产生出来至少要占几十M的空间。所以,我宁愿不用这个选项,配置下面要提到的编译属性来选择性的编辑Boost组件。

  属性(properties)有这么一些:

  toolset=toolset
variant=debug|release
link=static|shared
threading=single|multi
runtime-link=static|shared

  toolset指定编译工具集,可用的工具集在文档中有个列表。在Windows下一般是用VC编译,对应的工具集是msvc。如果不指定toolset,默认也是用的msvc。

  variant指定编译的是debug版本还是release版本。分别用于VC项目中的Debug配置和Release配置。

  link是指编译出来的Boost组件库是静态还是动态。静态Boost组件库会直接链接到你的项目中,而动态组件库会产生一个相应的.dll文件,运行时需要这个.dll文件的支持(配置在PATH中或放置在应用程序所在目录)。我觉得犯不着随一个应用程序发布一大堆动态库,而且你的.exe就算编译成10M,在如今的磁盘空间和网速下,都是可以接受的,所以一般都配置成static了。

  threading,指定连接单线程还是多线程的C++运行时库。

  runtime-link,指定C++运行时库是用静态的还是动态的。

  这些属性中,variant、threading和runtime-link是可以根据VC项目的“运行库”配置(在项目属性→C/C++→代码生成→运行库)来决定的。比如下表:

运行库设置对应的Boost编译属性配置
运行库设置 variant threading runtime-link
多线程(/MT) release multi static
多线程调试(/MTd) debug multi shared
多线程DLL(/MD) release multi static
多线程调试DLL(/MDd) debug multi shared

  因为我的VC 2008 Express没有单线程的相关配置,所以只列了多线程的项出来。如果要为单线程的“运行库”配置Boost编译属性,只需要相应地把threading的值改为single就行了。

  总的来说,编译命令也不是很麻烦。比如,编译正则表达式的“多线程调试DLL”和“多线程”两种配置,就用下面两个命令来分别完成:

D:/boost_1_39_0>bjam toolset=msvc link=static threading=multi variant=debug runtime-link=shared --with-regex

D:/boost_1_39_0>bjam toolset=msvc link=static threading=multi variant=release runtime-link=static --with-regex

  编译Boost用的是非常规方法,所以写这篇博客备忘。

boost安装的更多相关文章

  1. 解决 Boost安装:fatal error: bzlib.h: No such file or directory 问题

    参考: How to install all the boost development libraries? 解决 Boost安装:fatal error: bzlib.h: No such fil ...

  2. 【Todo】Boost安装与学习

    现在这里找下载包 http://sourceforge.net/projects/boost 我找的是 1_62_0 下面是从公司wiki上找到的一个说明. boost & thrift安装步 ...

  3. Linux平台的boost安装全解

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css); @import url(/ ...

  4. linux boost 安装

    sudo apt-get install libboost-dev 但是,我这样安装以后,编译程序时出现了很多错误,而且都是系统文件的错误.我开始以为是我的boost库版本不对,后来换了好几个版本,都 ...

  5. boost安装缺少libboost_iostreams.so

    编译安装boost库: 1 ./bootstrap.sh 2 ./bjam 3 ./b2 install 但安装boosth后,发现缺少libboost_iostreams.so库,后发现boost库 ...

  6. c++ 库 boost安装

    http://blog.chinaunix.net/uid-12226757-id-3427282.html ubuntu apt-get install libboost-dev 全部: apt-g ...

  7. Boost 安装详解

    一 Linux(redhat)篇 1.1 获取boost库 解压tar -zxvf boost_1.48.0.tar.gz 进入解压目录cd boost_1_48_0 1.2 编译安装 使用下面的命令 ...

  8. 【视频开发】【计算机视觉】doppia编译之二:boost安装

    编译安装boost库的方法大部分都是来自http://www.linuxidc.com/Linux/2013-07/87573.htm这篇文章,这里我用自己的语言重新组织,稍作修改和补充,最主要是方便 ...

  9. 解决CentOS下boost安装后不能使用的问题

    先说一说整个经历. 因为之前没有注意到gcc4.8.5比较旧,就已经安装好boost了,当时已经可以使用了,后来发现gcc太老了,一些软件安装需要比较新的gcc支持,所以决定升级gcc,结果boost ...

随机推荐

  1. 关于VIM在Win10下的无意义折腾

    这两天和VIM较上劲了,总结下来其实是极无意义的折腾,浪费了很多宝贵的时间! 事情是这样的,无意中发现vim在Win10的控制台窗口无参数打开时不显示那个“乌干达儿童”的界面(其实就是:intro的内 ...

  2. GSS1 spoj 1043 Can you answer these queries I 最大子段和

    今天下午不知道要做什么,那就把gss系列的线段树刷一下吧. Can you answer these queries I 题目:给出一个数列,询问区间[l,r]的最大子段和 分析: 线段树简单区间操作 ...

  3. 一个Itextsharp 批量添加图片到pdf 方法

    这里我就直接把我的页面贴进来了 using System; using System.Collections.Generic; using System.Web; using System.Web.U ...

  4. js完美解决IE6不支持position:fixed的bug

    详细内容请点击 <!DOCTYPE html><html><head><meta http-equiv="Content-Type" co ...

  5. js实现全屏

    详细内容请点击 1.window.open方式 第一种: 在已经打开的一个普通网页上,点击“全屏显示”,然后进入该网页对应的全屏模式.方法为:在网页的<body>与</body> ...

  6. 关于SVN下载代码和Android Studio里面导入别人代码build tools不一致问题总结

    项目build tools的sdk我没有 网络问题没法下载. 解决问题 方法 1.下载对应的SDK.需要VPN,或者FQ 2.将bulid.gradle的内容用下面的内容替换 // Top-level ...

  7. OpenGl从零开始之坐标变换

    http://www.tuicool.com/articles/uiayYrI OpenGL学习脚印: 坐标变换过程(vertex transformation) http://blog.csdn.n ...

  8. 解决PHP中file_get_contents抓取网页中文乱码问题

    根据网上有朋友介绍说原因可能是服务器开了GZIP压缩. 下面是用firebug查看我的博客的头信息,Gzip是开了的. 请求头信息原始头信息 代码如下 复制代码 Accept text/html,ap ...

  9. centos7没有安装ifconfig命令的解决方法

    ifconfig命令是设置或显示网络接口的程序,可以显示出我们机器的网卡信息,可是有些时候最小化安装CentOS等Linux发行版的时候会默认不安装ifconfig等命令,这时候你进入终端,运行ifc ...

  10. UI2_UISwitch与UIActivity

    // // ViewController.m // UI2_UISwitch与UIActivity // // Created by zhangxueming on 15/7/7. // Copyri ...