boost window下安装
window:
1、boost根目录运行 bootstrap.bat; 生成 bjam.exe
2、打开vs命令行,切换到boost目录,运行命令:bjam --toolset=msvc-10.0|msvc-9.0 --build_dir=D:/temp --stagedir=D:/boostsdkforwindows variant=release threading=multi link=static runtime-link=static
3、 命令执行完后,boost目录和boostsdkforwindows目录就是头文件和库文件,可以拷贝的所需的任意目录。
bjam --toolset=msvc-10.0 --build_dir=E:\temp --prefix=E:\boost1.55i --stagedir=E:\boostsdkforwindows --build-type=complete --with-atomic --with-chrono --with-context --with-coroutine --with-date_time --with-exception --with-filesystem --with-iostreams --with-locale --with-regex --with-system --with-thread --with-timer stage threading=multi
4、设定vs2010环境。(注:在2010环境下这步,在项目-->右键属性-->VC++ Directories 中去填写对应路径 )
修改环境变量:$(BOOST): D:\boost\boost_1_46_0
Tools -> Options -> Projects and Solutions -> VC++ Directories
在Library files加上$(BOOST)\bin\vc10\lib
在Include files加上$(BOOST)
使用举例:
#include<boost\thread.hpp>
此时,不用包含库文件,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-vc100-mt-1_46.lib")或
#pragma comment(lib, "boost_thread-vc100-mt.lib")
这两个lib其实是一样的,实在不明白boost编译时为什么每个库都要复制一份,难道是因为后者在升级boost版本后不用改代码?另外还有一个比较有用的宏:
#define BOOST_LIB_DIAGNOSTIC
它可以让VC在编译时的output窗口中输出程序具体链接了哪些boost库以及链接顺序。
ABI tag: encodes details that affect the library's interoperability with other compiled code. For each such feature, a single letter is added to the tag:
Key Use this library when: Boost.Build option s linking statically to the C++ standard library and compiler runtime support libraries. runtime-link=static g using debug versions of the standard and runtime support libraries. runtime-debugging=on y using a special debug build of Python. python-debugging=on d building a debug version of your code. variant=debug p using the STLPort standard library rather than the default one supplied with your compiler. stdlib=stlport