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 ...
随机推荐
- mac下为Apache 创建 .htaccess文件
标签:mac .htaccess 在设置固定链接时会提示如下的问题: 若您的 .htaccess 文件可写,我们可以自动修改它.但似乎它不可写,因此我们在下方列出了您 .htaccess 文件 ...
- pxe+kickstart实现无人值守批量安装linux
pxe+kickstart实现无人值守批量安装linux 实验准备:主机myrhel2作为服务器端,新建一个没有安装操作系统的虚拟主机,而且其与服务器端在同一个网段 安装的条件: 服务器端: ...
- 剑指Offer36 数字在排序数组中出现的次数
/************************************************************************* > File Name: 36_Number ...
- EL表达式运算符
语法:${运算表达式},EL表达式支持如下运算符 1.empty运算符:检查对象是否为null或“空”. 2.二元表达式:${user!=null?user.name : “”} . 3.[ ] 和 ...
- EL表达式获取数据
EL 全名为Expression Language. EL主要作用 获取数据: •EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数据.(某个web域 ...
- Java之经典Student问题2
创建5个学生对象给一个学生数组赋值,每个学生属性有:学号.姓名.年龄. 要求:1.给每个学生排序输出. 2.给所有学生年龄加1. 3.统计年龄大于20的学生人数. 在这里,我们用了compareT ...
- 计算日期时间 自动加1天 PHP计算闰年 java与PHP时间戳对比区别
昨天写一个同步数据库的模块 从一个数据库同步到另外一个数据库,因为数据较多,不可能一次性全部搬迁过去,所以就按照每天搬迁! 写了一个 模块,点击加1,只要点击一次,自动从A数据库取出1天的数据, 并 ...
- SQL语句新建表,同时添加主键、索引、约束
SQL语句新建数据表 主键,索引,约束 CREATE TABLE [dbo].[T_SendInsideMessageRec]( [SendInsideMID] [uniqueidentifier ...
- 2014028-jQuery与正则表达式[转]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- (转)集成架构:对比 Web API 与面向服务的架构和企业应用程序集成
摘要:总体上讲,SOA 和 Web API 似乎解决的是同一个问题:以实时的.可重用的方式公开业务功能.本教程将分析这些举措有何不同,以及如何将它们融入到一个不断演变的集成架构中.文中还将讨论 API ...