C++Builder2007如何安oost_1_36_0

来源:网络时间:2011-06-27 18:06:00

  最近突然对boost发生了兴趣,但是boost安装非常麻烦,网上介绍的方法大都不全面,搜到了一篇关于在其它编译器安装boost的方法,试着改为C++Builder2007适用的方法和大家分享,发布这篇文章之前只做过简单测试,如有问题,请指出。

  安装时我的电脑只安装了CodeGear RAD Studio2007,没有安装VS等其它编译工具,如果你的电脑同时安装了其它编译工具,你需要谨慎,当然是否有问题我也不知道,你自己研究吧,把最后的结果贴出来大家分享。

  1.相关网址 官方网站:

  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 (回车)

  
步骤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……

  这个需要比较长的时间,你可以休息一下,做点其它事,时间多长取决于你的计算机。我花了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,只有这样测试才完全)

文章内容来源于网络,不代表本站立场,若侵犯到您的权益,可联系我们删除。(本站为非盈利性质网站) 联系邮箱:9145908@qq.com