Windows系统编译BOOST

1.下载并解压至C盘boost路径下,如C:\boost;

2.执行bootstrap.bat生成bjam.exe;

3.编译命令如下:整个编译用时约2小时,运行完后(弹出输入提示符)  

        bjam stage --without-python --toolset=msvc-10.0 address-model=64 architecture=x86 --build-type=complete --stagedir="C:\boost\vc12"

参数说明: 
stage/install:stage表示只生成库(dll和lib),install还会生成包含头文件的include目录。

toolset:指定编译器,可选的如borland、gcc、msvc(VC6)、msvc-10.0(VS20010)等。address-model=64表示编译64位,architecture=x86架构说明

without/with:选择不编译/编译哪些库。

stagedir/prefix:stage时使用stagedir,install时使用prefix,表示编译生成文件的路径。推荐给不同的IDE指定不同的目录,如VS2013对应的是vc12,否则都生成到一个目录下面,难以管理。

build-dir:编译生成的中间文件的路径。默认就在根目录(D:\boost\boost_1_46_0)下,目录名为bin.v2(删掉),等编译完成后可将这个目录全部删除(没用了),所以不需要去设置。

link:生成动态链接库/静态链接库。生成动态链接库需使用shared方式,生成静态链接库需使用static方式。一般boost库可能都是以static方式编译,因为最终发布程序带着boost的dll感觉会比较累赘。

runtime-link:动态/静态链接C/C++运行时库。同样有shared和static两种方式,这样runtime-link和link一共可以产生4种组合方式,各人可以根据自己的需要选择编译。一般link只选static的话,只需要编译2种组合即可,即link=static runtime-link=shared和link=static runtime-link=static。

threading:单/多线程编译。一般都写多线程程序,当然要指定multi方式了;如果需要编写单线程程序,那么还需要编译单线程库,可以使用single方式。

debug/release:编译debug/release版本。一般都是程序的debug版本对应库的debug版本,所以两个都编译。

4.设定环境。

修改环境变量:$(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库以及链接顺序。

关于boost的auto-link机制,详细可以看看boost\config\auto_link.hpp里的代码,很容易可以读懂,并且值得我们学习。

参考文档:http://www.cnblogs.com/ComputerG/archive/2011/03/10/1979730.html

posted @ 2015-04-10 15:57  恩泽天下  阅读(400)  评论(0编辑  收藏  举报