Boost 被人们誉为 C++ 的准标准库,尝试着为 C++ 提供一个可跨平台使用的、大而全的库。作为一个软件工程师,一直没有机会对 Boost 进行了解与学习,现在正是迎头赶上的时候了!

今天在 Cygwin 下试着编译与安装了 Boost 库(boost_1_40_0版本),非常的简单与方便,大体步骤如下:

  1. 下载源代码,解压到任何你想要的地方,我是放在 ~/source_code 目录下,解压后所有 Boost 的文件都在文件夹 boost_1_40_0 里面。

  2. 编辑一段最简单的、只需要用到头文件的例子代码。在目录 ~/source_code/boost_1_40_0 下新建一个名叫 example.cpp 的文件,复制下面的代码:

#include <boost/lambda/lambda.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
    using namespace boost::lambda;
    typedef std::istream_iterator<int> in;
    std::for_each(
    in(std::cin), in(), std::cout << (_1 * 3) << " " );
}

从命令行编译:

$ g++ -I /home/water/source_code/boost_1_40_0/ example.cpp -o example

上面 -I 后的参数,请根据 Boost 解压后所在的目录填写。编译成功后,运行 ./example,试着输入几个数字看看。

这里补充说明一下有关 C++ 头文件包含问题:如果在上面的命令中,你不想使用 -I 选项,可以把 Boost 的头文件放到 Cygwin 的 #include 目录里去,一般来讲,是 /usr/local/include 或是 /usr/include 目录。你可以把 Boost 源码包里的 Boost 文件夹,一股脑地拷贝到 /usr/local/include 目录下(当然,不支持手动这样做)。

如果你用了下面的命令:

$ g++ example.cpp -o example

而又没有按上面说的把 Boost 的头文件复制到 #include 目录,则会提示类似下面的错误:

$ g++ example.cpp -0 exmaple
g++: exmaple: No such file or directory
g++: unrecognized option `-0′
example.cpp:1:35: boost/lambda/lambda.hpp: No such file or directory
example.cpp: In function `int main()’:
example.cpp:8: error: `boost’ has not been declared
example.cpp:8: error: expected namespace-name before ‘;’ token
example.cpp:8: error: `’ is not a namespace
example.cpp:12: error: `_1′ undeclared (first use this function)
example.cpp:12: error: (Each undeclared identifier is reported only once for each function it appears in.)

  1. 编译与安装 Boost 库的最简单方法

先生成命令行工具 bjam,它是专门负责编译、安装 Boost 库的工具。可以先查看一下相关帮助信息:

$ cd path/to/boost_1_40_0
$ ./bootstrap.sh –help

执行下面的命令就可以生成 bjam:

$ ./bootstrap.sh –prefix=path/to/installation/prefix

最后再利用 bjam 自动编译库文件:

$ ./bjam install

Boost 的编译与安装时间比较长,编译完成后,默认配置下头文件会安装到 /usr/local/include/boost 目录下,而生成的库文件会放到 /usr/local/lib 目录下。更详细的安装可以看看官方文档

  1. 以后写完 Boost 代码,就可以直接编译代码了。现在可以试着不指定 Boost 头文件的路径,再编译一把上面的 example.cpp 的例子:

$ g++ example.cpp -o example

现在 g++ 就能自动找到相关的头文件。

如果是 Linux 的话,编译与安装 Boost 的步骤应该大体上差不多;推荐使用各 Linux 发行版编译好的二进制版本,直接下载安装更省事。