转自:http://blog.csdn.net/lp310018931/article/details/47791143
因为boost都是使用模板的技术,所以所有代码都是写在一个.hpp头文件中。这样boost中的大部分内容是不需要编译生成相应的链接库,只需要设置下面的包含目录(或者设置一下环境变量),在源文件中包含相应的头文件就可以使用了。少部分库需要生成链接库来使用。
下面介绍完整安装boost库的方法:
1、首先到boost官网去下载最新的版本的boost库:
2、解压文件,在命令提示符中打开到boost库的根目录下:
双击bootstrap.bat文件,生成bjam.exe,执行以下命令:
bjam --toolset=msvc --build-type=complete stage
或者直接双击bjam.exe.
等待程序编译完成,大约要两个小时左右,会在boost根目录下生成bin.v2和stage两个文件夹,其中bin.v2下是生成的中间文件,大小在2.7G左右,可以直接删除。stage下才是生成的dll和lib文件。
bjam说明
boost自带一套编译工具bjam,bjam本身是跨平台的,并且也要自行编译出来。在boost目录下有bootstrap.sh和bootstrap.bat两个脚本分别用来编译*nix和windows下的bjam。bootstrap脚本可以传入参数,以在编译bjam过程中生成特定的编译boost的配置。这些配置保存在新生成的project-config.jam里,但还可以在运行bjam的时候再传入参数来覆盖。同时生成的b2是bjam的代理,运行哪个的效果都差不多。
在终端下运行
bjam --show-libraries
会列出所有要编译的库。
真正编译时,可以传入–with-xxx来选择编译哪些库,或者传入–without-xxx来选择不编译哪些库。如果不传则会读取project-config.jam的设置,如果也没有则是编译全部的库。
更多的参数可以用
bjam --help
来查看。例如编译成静态库还是动态库,运行时库是静态的还是动态的,编译完后要不要安装等。
注意:
旧版本的boost可能会存在编译问题,尽量用新的就好。bjam在*nix和windows支持的参数有不同。
3、打开vs:
视图->属性管理器->当前项目->Debug|Win32->Microsoft.Cpp.Win32.user双击
在弹出的属性对话框中:
通用属性->VC++目录:"包含目录": boost的根目录,例: D:\Visual Stdio 2013\lipeng\boost\boost_1_58_0
"库目录": stage下的链接库目录,例:D:\Visual Stdio 2013\lipeng\boost\boost_1_58_0\stage\lib
通用属性->链接器->常规:"附加库目录":同上面的"库目录",例:D:\Visual Stdio 2013\lipeng\boost\boost_1_58_0\stage\lib
至此环境就配置好了,下面测试一下:
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <boost/timer.hpp>
#include <boost/progress.hpp>
#include <libs/date_time/src/gregorian/greg_names.hpp>
#include <libs/date_time/src/gregorian/date_generators.cpp>
#include <libs/date_time/src/gregorian/greg_month.cpp>
#include <libs/date_time/src/gregorian/gregorian_types.cpp>
#include <boost/date_time/posix_time/posix_time.hpp>
using namespace boost;
int main()
{
boost::timer t;
boost::progress_display pd(100);
for (int i = 0; i < 100; ++i) //进度条
{
++pd;
}
boost::gregorian::date dt(2009, 12, 8); //date_time 库
assert(dt.year() == 2009);
assert(dt.day() == 8);
boost::gregorian::date::ymd_type ymd = dt.year_month_day();
std::cout<<"\n"<<ymd.year<<"/"<<ymd.month<<"/"<<ymd.day<<" the day is "
<<dt.day_of_year() <<" days of this year"<< std::endl;
std::cout << boost::gregorian::to_iso_extended_string(dt) << std::endl; //转换为其他格式
std::cout << boost::gregorian::to_iso_string(dt) << std::endl;
std::cout << boost::gregorian::to_simple_string(dt) << std::endl<<std::endl;
//对数组排序操作
std::vector<int> test_vc(100);
std::vector<int>::iterator beg_it = test_vc.begin();
std::vector<int>::iterator end_it = test_vc.end();
std::srand(std::time(NULL));
std::for_each(beg_it, end_it, [](int& n){n = rand(); });
std::copy(beg_it, end_it, std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl << std::endl;
std::sort(beg_it, end_it, std::greater<int>());
std::copy(beg_it, end_it, std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl<<std::endl;
boost::posix_time::ptime pt(boost::gregorian::date(2005, 2, 6));
std::cout << t.elapsed() << "s" << std::endl; //程序运行时间
system("pause");
return 0;
}
程序正确运行:
额外说明
bjam/b2命令举例:
1
2
3
4
|
b2
toolset
=
msvc
-
10.0
--
layout
=
versioned
architecture
=
x86
address
-
model
=
64
link
=
static
variant
=
debug
,
release
threading
=
multi
runtime
-
link
=
static
--
without
-
python
--
without
-
mpi
--
without
-
wave
--
without
-
graph
--
without
-
math
--
without
-
serialization
stage
|
使用不同的命令对你使用boost也会产生很大的影响,因为CPU速度和硬盘现在都已经不是大问题了,所以本例中选择了除了不必要库的完全编译,当然了,你时间够,硬盘够,可以完全编译
1
|
b2
--
toolset
=
msvc
-
10
--
build
-
type
=
complete
|
解释完以上的命令后,再说完全编译的后果。
1.toolset:表示编译器工具,我安装的是VS2010,所以是msvc-10(如果你是VS2005,可以使用msvc-8.0 VS2008是msvc-9.0)
2.architecture:表示架构,也就是你的CPU架构,x86,x64,因为我安装的是win7 32位,所以使用了x86的架构
3.instruction-set:表示指令集,依然是8086指令集
4.address-model:表示地址长度为32位
5.link:表示生成动态/静态链接库,动态链接库是shared,静态链接库是static,一般都会编译成静态库,因为给出程序的时候打包boost的库会非常庞大
6.variant:表示生成的Debug或者release版本,一般情况下会两种版本都会编译出来的
7.threading:表示单/多线程编译,一般我们的程序都会用到多线程,所以选择了multi
8.runtime-link:表示动态/静态链接C/C++运行时库(C/C++ Runtime),我们选择了动态链接
9.without/with:表示不需要编译/需要编译哪些库,一些自己不用的库可以无需编译
10.stage/install:stage表示只生成库文件(DLL和Lib),install还会生成包含头文件的include目录,推荐使用stage,因为boost_1_49\boost中就是boost库完整的头文件,所以无需再拷贝一份出来。编译出来的库会放在stage文件夹中