在进行之前,首先需要准备的当然是下载boost库的合适版本,下载安装gcc for windows,这些直接google,这里只简单记录编译时的步骤,防止遗忘之用。

虽然我只是一很菜很菜的菜鸟,可是却非常迷恋gcc+gdb+vim的组合,就算现在的VC如何强大如何方便,在进行一些只使用标准库和win sdk的编程时大部分时候还是在gvim里进行的。

首先需要得到bjam,将下载下来的boost库文件解压到一个文件夹里(假设其路径为###/boost),则在###/boost /tools/jam/src文件夹下可看到一个批处理文件build.bat,如果直接双击运行的话它会自动检测系统中存在的编译器并选择一个进行编译,我这里装有vc6.0,vc7.1,gcc4.5.0,结果发现缺省使用的是vc的较高版本即vc7.1。我们的目的是使用gcc编译,这时就需要给批处理指定参数,如在控制台执行:


###/boost/tools/src> build.bat gcc


即可指定使用gcc。

完成这一步后同级目录下会生成一个名为bin.ntx86的文件夹,里面就有我们需要的bjam.exe。我想得到的是一个完整编译的版,这时将bjam.exe拷贝到###/boost/目录下。这时就可以使用它来对整个库进行编译了。boost中有很多库是直接包含头文件即可使用的,而像 regex和thread等则需要编译后才行。bjam.exe有比较多的可选执行参数,可以使用bjam –help来查看。最常用和有用的一些解释如下:


  1. –toolset= <编译器> //指定编译工具
  2. –prefix= <库文件存放路径> //指定库文件存放路径,等同stagedir
  3. –build-type=complete //指定是否生成完全编译版本
  4. –with- //只编译指定库
  5. –without- //不编译指定库
  6. variant=debug|release //生成debug or release版本
  7. link=static|shared //决定使用静态库还是共享库
  8. threading=single|multi //决定生成单线程还是多线程库
  9. runtime-link=static|shared //是静态还是共享方式链接标准库

我这里想生成的是完全版本,所以启用了–build-type=complete版本,事实证明不太有这个必要,complete版本将上述的 single|multi和static|shared及debug|release在那里都排列组合了一番,生成的库文件就达1GB到2GB,而里面有很多版本对我们平时的使用来说是不常用到的,按自己的使用需要指定版本来编译比较好。我这里使用的bjam命令行是:


###/boost> bjam install –toolset=gcc –prefix=”c:/boost” –build-type=complete –without-python


接下来是漫长的等待时间……按我这个命令行参数在我的机子上编译了足足3个小时(当然,一部分是配置比较烂的后果),一部《2012》看完了都没编完。

终于编译完成之后可以看到c:/boost文件夹下有include和lib两个文件夹,.lib和.dll文件在lib下,而头文件则放在 include文件夹下面。当我们使用的时候需要为gcc指定包含c:/boost/include/boost-1_40头文件目录和c:/boost /lib库文件目录。至于如何包含——到现在为止我除了知道每次在编译时指定外还真没找到什么方法来为gcc指定包含路径的方法。

就以编译asio的chat为例,如编译chat_server的命令行为:


g++ -D_WIN32_WINNT -Ic:/boost/include/boos-1_40chat_server.cpp -Lc:/boost/lib -llibboost-thread-mingw450-mt-1_40 -llibboost-thread-mingw450-mt-1_40 -lws2_32 -o chat_server.exe


gcc命令行里面-I表示包含目录,-L表示包含库文件目录,-l表示链接哪个库。system和thread库是程序中明确用到过的,如果不 -l添加它们,那就会报一堆可能含thread和system字眼的错误出来。