boost 1.49编译及使用

1.下载
下载最新的boost版本,连接不上sf所以找了另外一个地址,http://miranda-dev.googlecode.com/files/boost_1_49_0.7z
boostpro提供编译好的二进制版本,http://www.boostpro.com/download/,不过版本较旧

2.关于编译
大部分的boost库是无需编译的,仅仅只需要包含头文件即可
需要单独编译的boost库如下:
  • Boost.Filesystem
  • Boost.GraphParallel
  • Boost.IOStreams
  • Boost.MPI
  • Boost.ProgramOptions
  • Boost.Python (see the Boost.Python build documentation before building and installing it)
  • Boost.Regex
  • Boost.Serialization
  • Boost.Signals
  • Boost.System
  • Boost.Thread
  • Boost.Wave
小部分库可选择编译:
  • Boost.DateTime has a binary component that is only needed if you're using its to_string/from_string or serialization features, or if you're targeting Visual C++ 6.x or Borland.
  • Boost.Graph also has a binary component that is only needed if you intend to parse GraphViz files.
  • Boost.Math has binary components for the TR1 and C99 cmath functions.
  • Boost.Random has a binary component which is only needed if you're using random_device.
  • Boost.Test can be used in “header-only” or “separately compiled” mode, although separate compilation is recommended for serious use.
3.编译步骤
1.在boost根目录下的运行批处理bootstrap.bat,将编译生成bjam.exe
2.利用bjam编译boost库,执行命令:
bjam --toolset=msvc-9.0 --build-type=complete
上面的命令完全编译,会生成多个版本的boost库,我花了一个半小时 实际选部分版本即可
bjam stage --stagedir="vc9" toolset=msvc-9.0  threading=multi variant=release,debug 
编译完成后生成的库在vc9目录中,编译中间文件在bin.v2目录中,可删除。参考官方说明参考官方说明 http://www.boost.org/boost-build2/doc/html/bbv2/overview/invocation.html


4.使用
boost的使用非常简单,只要在工程中添加boost头文件路径及依赖库目录即可,不需要指定所需的lib文件,这要归功于boost提供的Auto-link机制。

5.关于boost的Auto-link机制( 摘自 http://blog.csdn.net/cay22/article/details/4873468)
     使用boost时不需要指定需要链接的库,boost的auto-link机制将会自动帮我们包含对应的静态lib。也就是说,boost默认是以静态方式链接的,这样我们的工程属性最好也设为Multi-threaded (Debug)。如果想使用dll动态方式链接,需要预先定义宏:

#define BOOST_ALL_DYN_LINK
同样,此时boost也会默认帮我们包含对应的lib。如果不想使用boost提供的auto-link机制,或者对它的自动链接不太放心的话(其实大可不必担心),可以预先定义宏:
#define BOOST_ALL_NO_LIB
然后使用以下方法链接:
#pragma comment(lib, "boost_thread-vc90-mt-1_39.lib")

#pragma comment(lib, "boost_thread-vc90-mt.lib")
这两个lib其实是一样的,实在不明白boost编译时为什么每个库都要复制一份,难道是因为后者在升级boost版本后不用改代码?另外还有一个比较有用的宏:
#define BOOST_LIB_DIAGNOSTIC
它可以让VC在编译时的output窗口中输出程序具体链接了哪些boost库以及链接顺序。
关于boost的auto-link机制,详细可以看看boost/config/auto_link.hpp里的代码,很容易可以读懂,并且值得我们学习。

你可能感兴趣的:(serialization,features,Graphviz,output,Components,compilation)