boost安装
虽然很多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++→代码生成→运行库)来决定的。比如下表:
运行库设置 | 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安装的更多相关文章
- 解决 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 ...
- 【Todo】Boost安装与学习
现在这里找下载包 http://sourceforge.net/projects/boost 我找的是 1_62_0 下面是从公司wiki上找到的一个说明. boost & thrift安装步 ...
- Linux平台的boost安装全解
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css); @import url(/ ...
- linux boost 安装
sudo apt-get install libboost-dev 但是,我这样安装以后,编译程序时出现了很多错误,而且都是系统文件的错误.我开始以为是我的boost库版本不对,后来换了好几个版本,都 ...
- boost安装缺少libboost_iostreams.so
编译安装boost库: 1 ./bootstrap.sh 2 ./bjam 3 ./b2 install 但安装boosth后,发现缺少libboost_iostreams.so库,后发现boost库 ...
- c++ 库 boost安装
http://blog.chinaunix.net/uid-12226757-id-3427282.html ubuntu apt-get install libboost-dev 全部: apt-g ...
- Boost 安装详解
一 Linux(redhat)篇 1.1 获取boost库 解压tar -zxvf boost_1.48.0.tar.gz 进入解压目录cd boost_1_48_0 1.2 编译安装 使用下面的命令 ...
- 【视频开发】【计算机视觉】doppia编译之二:boost安装
编译安装boost库的方法大部分都是来自http://www.linuxidc.com/Linux/2013-07/87573.htm这篇文章,这里我用自己的语言重新组织,稍作修改和补充,最主要是方便 ...
- 解决CentOS下boost安装后不能使用的问题
先说一说整个经历. 因为之前没有注意到gcc4.8.5比较旧,就已经安装好boost了,当时已经可以使用了,后来发现gcc太老了,一些软件安装需要比较新的gcc支持,所以决定升级gcc,结果boost ...
随机推荐
- hdu 4424 并查集
思路:将边从大到小排序,判断向哪边连,能使总和最大. #include<map> #include<set> #include<cmath> #include< ...
- 公用的stringUtil工具
(function(){ var ISCHINESE = /[\u4e00-\u9fa5]/; var getData = function( value , maxLenth , isStrick ...
- 程序代码创建IISWEB站点
#region 新建立一个IISWEB站点 ///<summary> ///添加一个站点 ///</summary> public string CreateWebSite() ...
- OC3-xml文件解析
<?xml version="1.0"?> <xml_api_reply version="1"> <cities> < ...
- BeanDefinition的载入和解析
1.在完成对代表BeanDefinition的Resource定位的分析后,下面来了解整个BeanDefinition信息的载入过程. 2.对IoC容器来说,这个载入过程,相当于把定义的BeanDef ...
- linux 系统运行级别及修改[转]
Linux运行级别从0-6,共7个. 0:关机.不能将系统缺省运行级别设置为0,否则无法启动. 1:单用户模式,只允许root用户对系统进行维护. 2:多用户模式,但不能使用NFS(相当于Window ...
- hdu 2057 A+B Again
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2057 题目分析:涉及到16进制内的加法,可以用%I64x直接来处理,要注意到16进制中负数是用补码来表 ...
- 济南学习 Day 3 T1 am
NP(np)Time Limit:1000ms Memory Limit:64MB题目描述LYK 喜欢研究一些比较困难的问题,比如 np 问题.这次它又遇到一个棘手的 np 问题.问题是这个样子的:有 ...
- IPv6协议介绍
IPv6是为了解决基于IPv4的TCP/IP协议簇遇到的问题而推出的下一代IP协议.由于IPv4中采用的编制方式使得可用的网络地址和主机地址的数目远低于理论数目,随着全球互联网的快速发展,现有的IPv ...
- VC和VS系列(2005)编译器对双精度浮点溢出的处理
作者:风影残烛 在还原代码的过程中.目前程序是采用VS2005(以上版本)写的. 我使用的是vc6.0,结果.在运算的时候.发现编译器对 // FpuTlxTest.cpp : 定义控制台应用程序的入 ...