C++Builder2007如何安装boost_1_36_0

来源:互联网 发布:qt软件开发 编辑:程序博客网 时间:2024/06/05 09:58

C++Builder2007安装boost_1_36_0

ydlchina

 

序言:
   最近突然对boost发生了兴趣,但是boost安装非常麻烦,网上介绍的方法大都不全面,搜到了一篇关于在其它编译器安装boost的方法,试着改为C++Builder2007适用的方法和大家分享,发布这篇文章之前只做过简单测试,如有问题,请指出。
   安装时我的电脑只安装了CodeGear RAD Studio2007,没有安装VS等其它编译工具,如果你的电脑同时安装了其它编译工具,你需要谨慎,当然是否有问题我也不知道,你自己研究吧,把最后的结果贴出来大家分享。

1.相关网址   官方网站:http://www.boost.org/

2. 准备

您可以上boost官方网站(参看1.相关网址),下载这两个文件(既然是免费,还是官方的好):

boost 1.36.0 的源代码压缩文件,推荐下载 7zip 版本:boost_1_36_0.7z。
boost 编译工具,请选择windows下的可执行文件:boost-jam-3.1.16-1-ntx86.zip
下载后,得到源代码压缩文件,如果是7zip格式的boost_1_36_0.7z,约25M,解压后,将迅速变为175M,但这仅仅是源代码及文档的大小,在编译过程中,所需的空间更是惊人,请您保证解压缩后文件所在的磁盘驱动器,至少有2个G的可用空间(原文说需要更大的空间,不过我用了不到1.9G)。

boost 的编译工具,可以根据需要,将编译之后库文件,及不需要编译的头文件,统一复制到指定的目录,这样有利于我们得到一个“干净”的boost编译结果目录,本文将采用此方法。

下面,我们假设boost_1_36_0.7z被解压到“X:/tmp/boost_1_36_0”目录下,其中“X:”表示您选用的磁盘驱动器盘符, "tmp" 是我们事先创建的文件夹,而 “boost_1_36_0”则在解压以后得到。我们把“X:/tmp/ boost_1_36_0”称为“boost安装源路 径”。

接下来,假设我们希望它boost安装到“E:/ boost_1_36_0”目录下,请事先创建好这个文件夹,我们把这个路径,称为“boost安装目标路径”。

请解压“boost-jam-3.1.16-1-ntx86.zip”文件,得到bjam.exe,将它复制到boost安装源路径,即“X:/tmp/boost_1_36_0”之下。

3. 编译

步骤1:打开“开始”菜单,选择“运行”,输入cmd,进入控制台窗口,然后在其内通过cd命令,切换到boost安装源路径下。本例中为:

“X:/tmp/boost_1_36_0”,则过程如下:

X: (回车)

cd tmp/boost_1_36_0 (回车)

步骤2:继续上步,请在控制台内输入:

bjam --show-libraries (回车)

步骤3:正确情况下,将看到以下输出内容:

The following libraries require building:

- date_time

- filesystem

- function_types

- graph

- iostreams

- math

- mpi

- program

_options

- python

- regex

- serialization

- signals

- system

- test

- thread

- wave

步骤4:这里列出的是所有需要编译的boost模块,但我们将放弃对以下模块的编译: wave、mpi、 python、math、graph。这些模块的具体含义,大家如有需要,请自行查明。

步骤5:继续上步,在控制台内输入:

bjam install --toolset=borland --prefix="E:/boost_1_36_0" debug --without-wave --without-mpi --without-python --without-math --without-graph (回车)

如果你要全部编译就去掉without

bjam install --toolset=borland --prefix="E:/boost_1_36_0" debug(回车)

步骤6:请特别注意,要更换为您自己的“boost安装目标路径”。其它部分作如下说明:

步骤7:-- 是两个连续的减号,=前后均不能夹带空格,除路径之外,参数都是小写字母。

步骤8:--toolset 表示采用borland编译。因此,要正确编译boost,请您一定事先已安装C++Builer2007。

步骤9:debug表示我们首先编译“调试版”。

现在很多人在安装boost后,使用时总是提示缺少某个带“-d-”的lib文件,实际就是缺少这一步,它是C++Builder2007在debug时所需要的。

步骤10:多个 --without 指定了所要放弃编译的模块。你也可以根据你的需要,在此增加或去掉某个模块。

步骤11:回车后,控制台内将出现大量看似奇奇怪怪地文字,最后能看到以下内容,就表示成功完成本步:

...failed updating 2 targets.

...skipped 31 targets...

...updated 341 targets...

(上面的数字也许与你的不一样,这是由你使用的编译器对boost的支持程度和你编译的模板多少决定的)
这个需要比较长的时间,你可以休息一下,做点其它事,时间多长取决于你的计算机。我花了15分钟左右。

4. release版本
  在控制台内输入:

bjam install --toolset=borland --prefix="E:/boost_1_36_0" release --without-wave --without-mpi --without-python --without-math --without-graph (回车)
  
   改变的是“debug”更换为“release”。回车后开始发行版的boost库编译。现在网上提供的方法大多都是这一步编译出的lib文件,即文件名不带“-d-”的lib文件,如果你需要将你的项目release就需要这一步。
   花费的时间和debug差不多。
5. 更加完美
   如果你要完全发布你的项目,那你需要这一步,否则你会得到缺少某个文件名中带有“-s-”的lib文件的提示。

如果您的硬盘还有很大的空闲,您可以完整地编译boost。如果你只是研究boost,你不需要这一步。


    boost完全编译需要比较长的等待,而且在空间需要的也比较多。我用了一个小时左右,时间长短取决于你的系统。

完整编译boost的命令行:

bjam install --toolset=borland --prefix="您的/boost/安装/目标路径" --build-type=complete

6. 说明

检查“boost安装目标路径”,应该可以看到两个子目录位于其内:“include”及“lib”,前者保存着所有采用纯头文件形式提供的boost代码文件;后者则保留着上一步的编译结果,这些库文件首先可以区分为以下三种形式:

“动态链接库”,扩展名以.dll结束
“导入库”,扩展名以.lib结束,且文件名以版本号1_36结束
“静态链接库”,以扩展名.lib结束。
然后三种形式再次区分为“发行版”和“调试版”,后者的文件名比前者多出一个“-d-”修饰。另外我们还可以看到所有库文件名中都带有“-mt-”字样,这是表示这些库都支持“多线程/Multithreads”。

请保存“boost_1_36_0.7z”及“boost-jam-3.1.16-1-ntx86.zip”两个文件,然后,建议您将 “boost安装源路径”下的doc文件夹——这是boost的说明文档——复制到“boost安装目标路径”下,然后,您可以放心地删除“boost安装源路径”。


7. 结束
   打开C++Builder2007.
   7.1.   Project-Default Options-C++Builder设置。在Include Path添加前面的“include/boost-1_36”所在的目录,在Library Path添加“lib”所在的目录。
   7.2.   Tools-Options设置。
       C++Options-Paths and Directories.在此如上步设置。
  终于结束了,非常感谢那些在网上无偿发布技术的大佬们,是你们让这个世界变得更加五彩缤纷。在此也鄙视一下微软的黑屏计划,支持一下番茄花园,虽然这是微不足道的。

  测试一下你的安装。
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//#include <boost/regex.hpp>
#include <boost/regex.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
 : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   boost::regex reg("(I.*)");
   bool b=boost::regex_match(  "I love ydlchina.",  reg);
   if(b==true)
  ShowMessage("天哪,你成功了!");
}
//---------------------------------------------------------------------------

在debug下运行试试,再在release试试。(记得还要在Project Manager或Configuration Manager选release,只有这样测试才完全)