关键字:boost 编译 安装
boost编译。没啥新东西,老生常谈。
先给出英文的编译帮助,有什么不明白的或者我没说清楚的请查阅并确认。
www.boost.org/more/getting_started.html
或者你的boost的安装路径下的more/getting_started.html
这里以1.33.1为例。
1.下载boost包,并解压到某个文件夹下。这里用为方面起见$boost_dir代替,在说明路径的地方如果出现了$boost_dir请用实际的boost的解压路径替代。
注:如果你下载了boost的一些增补包,这些包一般是在boost从上一个大版本到新大版本之前被收录的一些新的库或者是新的编译工具,例如新的bjam。请不要以为是重名而把同名文件夹覆盖了。看准合适位置解压就是了。
2.打开命令行工具。以下的主要工作都将在命令行中进行。
3.首先是编译jam工具。
3.1 使用命令行
SET PATH=%PATH%;$boost_dir\tools\build\jam_src\;
设置环境变量。这一步也可以在“我的电脑点右键->属性->高级->环境变量->user variable或system variable中"设置,而且是永久性的。使用set设置的环境变量只对当前命令行有效。
3.2 运行build.bat。在命令行中查看结果。如果结果显示“update 1 targets successful"这样的信息,则表明编译成功。此时“$boost_dir\tools\build\jam_src\”文件夹可发现一个新的文件夹btn.x86,在里面可以发现bjam.exe。(不知道会不会有btn.x64文件夹。。。我是X86的机器,不太清楚)
将这个文件夹也添加到环境变量中。
SET PATH=%PATH%;$boost_dir\tools\build\jam_src\btn.x86;
3.3 如果没能成功编译bjam,则可能是编译器的设置问题。对于Visual C++(2005Express有点特殊)编译器,找到common7\tools\vcvars32.bat,把它拖到命令行窗口中,运行一下,然后再执行build.bat。对于2005 Express,这个编译器携带的是精简的编译环境,你可以同样找到vcvars.txt,然后更名为vcvars.bat,按照刚才的方式执行一边即可。
4.bjam编译好后,就可以利用它编译库文件了。将命令行的工作目录放置到$boost_dir下,然后执行一下bjam --help,看能否正确的执行bjam.exe。如果提示找不到文件,将bjam所在的路径添加到环境变量path中,实在不行就把bjam复制到$boost_dir下。
5.如果试图使用boost.python库,则需要添加安装python,并设置对应的环境变量,这里的root对应的是你的python的安装路径,ver对应的是你的python版本。
SET PYTHON_ROOT=X:\Python2.3.4
SET PYTHON_VERSION=2.3
6.如果使用了boost.iostreams的compress或者unicode功能,请参阅对应的提示。通常你需要zlib和icu这两个库。
7.编译选项:
选项参见$boost_dir\more\getting_started.html,这里有详细的说明,以下仅列举一个很具代表性的选项。
bjam -sBOOST_ROOT=. -sTOOLS=vc-7_1 --with-thread "-sBUILD=debug release <runtime-link>static/dynamic"
上面的命令行设置环境变量BOOST_ROOT为当前路径,使用Visual C++ 7.1编译器,仅编译thread库(因为完整的编译耗时很长,所以建议使用--with-<library_name>来编译指定库。类似的还有--without-<library_name>选项)。
编译好的库都在$boost_dir\bin下。你可以进去搜索所有的lib/dll文件然后剪切出来放到一个文件夹中,再把其他的中间文件删掉就好了。
类似的你还可以编译其他的类库,具体的库可能需要依赖一些其他的库,你可以参见库的编译说明。另外生成的库运行时链接情况也是不一样的,例如有的库不能支持静态链接。这一点请详细阅读帮助文件。
8.使用:
这里可能不太好举例。先将$boost_dir加入到编译器的include目录列表中。然后我编译好了thread库,并且将所有的相关文件都统一放置到了$boost_dir\bin\thread\目录下,我便可以在我的工程中将该目录添加到链接文件的路径中。然后依据情况选择是否手工添加库文件。在帮助的“Automatic Linking on Windows”一节,文档说,很多需要编译的库,boost都使用了#pragma指示字指明了库名称,也就是说只需要加上库所在的路径就好了。
最后是关于运行时库的问题。最好把你的工程选用的CRT与编译boost库时使用的CRT一致起来。这一点可以根据boost文件的名称判断。否则的话可能会出现内存的使用错误(尤其是分配和释放不在一个堆的时候更是如此)。
最后是一篇中文文档。这篇也不错。如果不清楚,E文也不是太好的可以参看它
http://blog.csdn.net/billdavid/archive/2005/03/07/313347.aspx