编译安装
使用下面的命令创建boost自己的编译工具bjam(目的是保证Boost在任何平台上都能用bjam编译),类似于GNU Make。
./bootstrap.sh
建议先查看下帮助文档,了解些默认选项,命令为
./bjam –help
(我试了一下,./b2 -help有效)
常用选项(Options)和属性(Properties)的说明,一般带有–前缀的关键词为option,没有的则为property。
–show-libraries
显示需要编译才能使用的库列表
–build-type=minimal|complete
–build-type=minimal为默认值,此时在Linux下只编译生成release版的动态链接C运行库(C++标准库)的多线程静态库和动态库。
–build-type=complete,在Unix/linux下要编译多个变体(debug或release,多线程或单线程,静态库或动态库,静态链接或动态链接C运行库/C++标准库)。不建议全部编译,费时还费空间,提倡按需编译。
–layout=versioned|tagged|system
决定需要编译的库名及头文件的地址目录名的生成策略。默认Windows下–layout=versioned,Linux下–layout=system。
当同时编译多个版本时,最好设置–layout=versioned或–layout=tagged,否则编译多半会失败,原因是有的版本同时编译若不指定命名策略,可能在输出到指定目录的时候造成命名冲突。
注:–build-type=complete时,不需要设置此属性。但指定variant=debug,release等属性时,须确保–layout=versioned或–layout=tagged。
–build-dir=DIR
指定存放编译过程中生成的中间文件,目标文件等其他文件的目录,默认在./bin.v2。
–with-
创建和安装指定的库
–without-
不对指定的库进行创建和安装,默认创建所有的库
安装:关键词 install 或 stage
./bjam install
install会安装头文件和库文件到相应指定目录,头文件安装到/usr/local/include下,库文件安装到/usr/local/lib下。具体指定安装目录见./bjam –help。
./bjam stage
stage说起来只能说是收集生成的库文件到一个目录下,通常默认就在./stage下。
注:
install 和 stage 貌似不能同时使用,中间会卡住。
若编译过程中未指定install或stage,则生成的目标库文件只存在于–build-dir所指的目录中,默认为./bin.v2。考虑到此,若无需将头文件和库文件安装,则推荐使用stage关键字。
下面是属性:
toolset=toolset
指定编译器,默认自动检测,安装了多个编译器的时候可以使用此属性。
variant=debug|release
指定编译debug或release版本。
link=static|shared
指定创建静态库或动态库
runtime-link=static|shared
指定创建的库是静态链接还是动态链接到C运行库(或C++标准库),这个选项需依据–link的类型,不同的编译器允许的链接策略不一样,比如在GCC下,在生成动态库(–link=shared)时,就不允许进行静态链接到C运行库(或C++标准库)。
threading=single|multi
指定创建多线程或单线程的版本库。
属性可同时设置,如下两种方式,为了避免名字冲突,建议采取propery=value的格式:
./bjam variant=debug,release stage
或
./bjam variant=debug variant=release
这两种方式都可以。
最后执行的创建命令:
sudo ./bjam stage --toolset=gcc --prefix=/opt/boost_1_48 variant=debug,release --with-date_time --with-thread --with-filesystem --with-program_options link=static runtime-link=static threading=multi
要注意的是开始检查各项属性会花费有些时间,然后才开始编译,我开始忘了这一茬看怎么不编译就直接CTRL-C了好几回,真是瞎折腾了
另附上网络上找到的非常好的boost使用指南
——更新于2011/7/19,目前我已对boost的安装和使用有了新的认识,因此也会对两年前写的这篇文章做大幅修改,网上转载版本泛滥,请以本文为准。
理论上,本文适用于boost的各个版本,尤其是最新版本1.47.0;适用于各种C++编译器,如VC6.0(部分库不支持),VS2003,VS2005,VS2008,VS2010,gcc,C++ Builder等。先总结一下Windows系统。
一、下载
首先从boost官方主页http://www.boost.org/下载最新版boost安装包,或者使用Subversion获取最新版本,地址是:http://svn.boost.org/svn/boost/trunk。本人现在一般都用svn,这样可以很方便的进行update和build,而不是每次都下载新的安装包并rebuild。
二、安装
如果是使用下载的安装包,那么请将boost安装包解压至本地目录,如:E:\SDK\boost;如果是用svn的,也可以将boost的代码checkout到这个目录。因为boost一部分类是需要编译成库才能使用的,所以我们还需要准备好boost专用的编译辅助工具bjam。在命令提示符(cmd.exe)中执行根目录下的bootstrap.bat,编译后的bjam.exe会自动拷贝到该目录下(bjam必须与boost-build.jam在同级目录)。
三、编译
bjam stage --toolset=msvc-9.0 --without-graph --without-graph_parallel --without-math --without-mpi --without-python --without-serialization --without-wave --stagedir="E:\SDK\boost\bin\vc9" link=static runtime-link=shared runtime-link=static threading=multi debug release
下面详细解释一下每个参数的含义:
需要注意的是,如果使用VS2008编译boost(其他版本VC未作测试,可能也有类似问题),那么假如你调用boost的主程序添加了_BIND_TO_CURRENT_VCLIBS_VERSION预定义宏来强制使用最新版本的Windows CRT库,那么你的boost也需要添加这个预定义宏来进行编译,否则会导致程序因为各模块使用的CRT库版本不统一而出现“在某些机器上运行提示‘由于应用程序配置不正确,应用程序未能启动’的问题”,关于该问题请参考我的另外一篇文章:【原】解决VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题。添加该预定义宏的方法是:打开boost安装根目录下的boost\config\compiler\visualc.hpp,在最上面增加:
// Added by terry, 2011/4/19, Force the linker to use the latest version of CRT/MFC/ATL dll
#ifndef _BIND_TO_CURRENT_VCLIBS_VERSION
#define _BIND_TO_CURRENT_VCLIBS_VERSION 1
#endif // _BIND_TO_CURRENT_VCLIBS_VERSION
这种方法修改了boost的源码,并非我所愿, 但是无奈没有找到更好的方法,如果有人知道希望能够留言告诉我。
2、占用若干小时的编译时间
3、头文件和库文件存放于C:\Boost(本人非常反感)
4、生成的很多文件可以永远也用不上
四、配置
添加到IDE相应的路径下面即可。
五、使用
#define BOOST_ALL_DYN_LINK
#define BOOST_ALL_NO_LIB
#pragma comment(lib, "boost_thread-vc90-mt-1_47.lib")
#pragma comment(lib, "boost_thread-vc90-mt.lib")
关于boost的auto-link机制,详细可以看看boost\config\auto_link.hpp里的代码,很容易可以读懂,并且值得我们学习。
六、Linux下编译与配置的区别:
./bjam stage --toolset=gcc --with-date_time --with-thread --with-filesystem --with-program_options --stagedir="/mnt/hgfs/sdk/boost/bin/gcc" link=static runtime-link=static threading=multi debug release
CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:"/mnt/hgfs/sdk/boost"
export CPLUS_INCLUDE_PATH
LIBRARY_PATH=$LIBRARY_PATH:"/mnt/hgfs/sdk/boost/bin/gcc/lib"
export LIBRARY_PATH
这样就可以直接使用boost的头文件和库文件了,并且与Windows共用一套代码,非常方便。
上述转自:http://www.cnblogs.com/wondering/archive/2009/05/21/boost_setup.html#2211827