首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 Linux 上的 IBM 编译器的 xlcpp 工具集构建 Boost 库-1

使用 Linux 上的 IBM 编译器的 xlcpp 工具集构建 Boost 库-1

简介Boost 是一个 C++ 库集合,这些库由 Boost 社区根据 Boost 软件许可来开发、审核和发布。Boost 中的库使用 C++ 程序设计中的高级特性和最新创新,增强了编程语言的功能。多年来,许多 Boost 库已在经过调整后包含在 C++ 标准库中。
Boost 包中包含构建 Boost 库的代码库,引导构建引擎的源代码,以及推进构建流程的 JAM 配置。尽管一些用户仍在采用使用 make 实用工具构建常规 C++ 应用程序的相同方式来构建 Boost 库,但业界的部分用户现在已经开始使用 Boost 构建引擎 b2 构建和安装这些库。因为构建流程所需的所有 JAM 配置文件会与每个 Boost 版本一起发布,所以使用 b2 构建 Boost 库是一个非常简单的过程。
Boost 构建工具 b2/bjamb2 是构建引擎的官方名称,该引擎是根据一个名为 bjam 的早期构建工具来开发的。在较新的 Boost 版本中,b2 和 bjam 实际上是相同的。这可以通过在两个文件上运行校验和函数来验证。为了便于讨论,本文将 Boost 构建工具称为 b2。
图 1:校验和可确认 b2 和 bjam 是相同的
b2 支持许多平台上的大量编译器。每个编译器都代表构建引擎的一个工具集。不同于为 IBM XL 编译器指定的传统工具集 vacpp,Boost 1.59.0 为较新的 IBM 编译器引入了一个名为 xlcpp 的新工具集。编写本文时,小端系统上的 IBM XL for Linux 编译器支持 xlcpp 工具集。
表 1 显示了 Boost 版本、编译器版本和用于小端系统上的 Linux 的相应工具集之间的关系。对于其他平台上的 IBM XL 编译器对 Boost xlcpp 工具集的支持,请参阅  网站。
表 1:小端系统上的 IBM XL for Linux 编译器所支持的工具集
  Linux(小端)编译器版本  Boost 版本  工具集  XL C/C++ V13.1.2  1.55.0  vacpp  XL C/C++ V13.1.3  1.59.0  xlcpp
有关 Boost.Jam 语言、Boost 构建引擎、构建配置和安装的详细信息,很容易在  网站上找到。本文将重点介绍使用用于 IBM XL 编译器的新 xlcpp 工具集构建和安装 Boost 库所需的具体配置。讨论中使用了 1.59.0 版,这是随 xlcpp 工具集一起发布的第一个 Boost 版本。但是,这些内容可能也适用于更高的 Boost 版本。
构建流程通常,构建 Boost 库的过程包含以下 3 个步骤:
  • 准备源代码
  • 引导 Boost 构建引擎 b2
  • 使用 b2 构建和安装 Boost 库
在指定位置构建和安装 Boost 库后,该库和 Boost 头文件即可供软件工程师在其应用程序中使用。

您可以从  网站下载 Boost 源代码。您需要先解压下载的包,然后才能使用它。清单 1 给出了一个获取和解压 Boost 1.59.0 版源代码的示例。
清单 1:获取和解压 Boost 代码库
1
2
$ wget http://sourceforge.net/projects/ ... boost_1_59_0.tar.gz
$ gunzip < boost_1_59_0.tar.gz | tar –xvf-




无需像清单 1 中那样分开使用 gunziptar,用户可结合使用 z 标志和 tar 实用工具,使用 gunzip 解压 .gz 文件。但是,在命令中包含 f 作为最后一个标志非常重要。f 标志指定了压缩文件的路径和名称。
解压过程会创建一个名为 boost_1_59_0 的目录。在讨论构建和安装过程时,将此目录称为 BOOST_ROOT。
需要打补丁才能使用 xlcpp 工具集构建 Boost 库。用户必须获取相应的补丁文件并应用于已解压的 Boost 源代码,然后才能继续操作。在修补过程中,将会适当地修改 Boost 头文件和 JAM 配置文件,以确保成功创建 Boost 库。请参阅 ,查看可用补丁文件的列表。补丁文件可通过 FTP 客户端或系统工具(比如 wget)获取。用户必须避免复制 Web 浏览器上呈现的补丁文件内容,因为这可能导致丢失该文件的一些部分。清单 2 给出了一个为 Boost 1.59.0 的源代码获取和应用补丁文件的示例。
清单 2:获取和修补 Boost 源代码
1
2
3
$ wget ftp://public.dhe.ibm.com/softwar ... modfile_le_1313.txt
$ cd <the-directory-where-boost_1_59_0-resides>  
$ patch –p0 < <path-to-the-pathfile>/boost_modfile_le_1313.txt




备注:由于某些限制,比如存在遗留代码,一些用户将无法向 Boost 源代码应用补丁文件。这将在本文的一篇配套文件中解决。
尽管压缩包相对较小,但解压、构建、安装以及测试整个 Boost 库集合的构建产品需要数 GB 的磁盘空间。如果要测试 Boost 库,必须准好充足的磁盘空间。
跟着引导过程来创建 Boost 构建引擎Boost 提供了一个名为 bootstrap.sh 的脚本来构建 b2,b2 是构建、安装和测试 Boost 库所需的 Boost 构建引擎。可以在 BOOST_ROOT 目录 boost_1_59_0 中找到 bootstrap.sh 脚本。
要使用 xlcpp 工具集引导 b2,用户必须确保 IBM xlC 编译器的路径包含在 $PATH 环境变量中。您可以使用 which 命令验证这一点,如清单 3 所示。
清单 3:准备用于引导的 $PATH 环境变量
1
2
3
4
5
6
$ which xlC                                           #xlC is not on $PATH
which: 0652-141 There is no xlC in  …  
$ PATH=/full-path-to-xlC{PATH}                           #Add path of xlC to $PATH
export PATH
$ which xlC                                           #xlC is on the $PATH
/full-path-to-xlCxlC




准备好 $PATH 变量,让构建引擎能够找到 xlC 编译器,然后使用选项 --with-toolset=xlcpp 从 BOOST_ROOT 目录中调用 bootstrap.sh 脚本。
清单 4:调用 bootstrap.sh 来使用 xlcpp 工具集构建 b2/bjam
1
2
3
4
5
6
7
8
9
$ cd boost_1_59_0
$ ./bootstrap.sh --with-toolset=xlcpp
Building Boost.Build engine with toolset xlcpp...

Generating Boost.Build configuration in project-config.jam...
Bootstrapping is done. To build, run:
    ./b2
To adjust configuration, edit 'project-config.jam'.





如果 bootstrap.sh 脚本成功运行,将在目录 boost_1_59_0 中创建两个名为 b2 和 bjam 的可执行文件。如图 1 所示,b2 和 bjam 事实上是两个相同的文件。
如果引导失败,查看 boost_1_59_0 目录中存储的日志文件 bootstrap.log 可能会了解失败的原因。请注意,尽管 bootstrap.log 中的信息描述了当前工作目录 "." 中的问题,但在某些地方,目录 "." 实际指向 boost_1_59_0/tools/build/src/engine。这是因为在构建过程中,脚本 bootstrap.sh 发出了 cd 命令来导航到 boost_1_59_0/tools/build/src/engine 目录。
如果没有指定工具集,bootstrap.sh 脚本会尝试使用系统上的其他可用编译器。该脚本执行的所有活动都将记录在 BOOST_ROOT 目录 boost_1_59_0 中的日志文件 bootstrap.log 中。
在极少数情况下,bootstrap.sh 脚本未能使用 xlcpp 工具集创建可执行文件 b2 和 bjam,这时用户可尝试使用系统上的不同编译器来调用该脚本。其他编译器创建的构建引擎 b2/bjam 可用作替代引擎,以便在后续步骤中继续使用 xlcpp 工具集构建、安装和测试 Boost。
使用 xlcpp 工具集构建和安装 Boost使用引导程序创建后,b2/bjam 可用于构建、安装和测试 Boost 库。如果调用 b2/bjam 时未使用任何命令行选项,将会使用默认配置来构建 Boost。对于大多数软件项目,具有默认配置的构建版本可能还不够。下一节将讨论使用 xlcpp 工具集和 b2 的命令行选项执行完整的 Boost 构建所需的步骤。可以在  网站上找到所有构建选项的文档;本文只重点介绍用于 xlcpp 工具集的主要选项。
设置一个目录来启动 Boost 构建
为方便讨论,我们假设构建过程将从一个名为 mybuild 的工作目录中执行。Boost 源代码的路径(也称为 BOOST_ROOT)是 <path>/boost_1_59_0。工作目录的的设置如清单 5 所示。
清单 5:设置 Boost 构建的环境变量
1
2
3
4
5
6
7
8
$ mkdir mybuild                                         #Create working directory
$ cd mybuild
$ BOOST_ROOT=<path>/boost_1_59_0                         #Set $BOOST_ROOT
$ export BOOST_ROOT

$ mkdir boost_build                                     #Create build directory
$ BOOST_BUILD=<path>/boost_build                         #Set $BOOST_BUILD
$ export BOOST_BUILD




您需要正确设置所创建目录的权限,构建流程才能访问它们。
指定 BOOST_ROOT 路径对构建过程至关重要;它会告知构建引擎在系统上的何处查找源代码。除了如清单 5 中所示指定 BOOST_ROOT 作为环境变量之外,用户还可以在使用 –s 选项调用 b2 时直接提供该值作为命令行选项。
清单 6:在命令行上指定 BOOST_ROOT
1
<path>/b2 -s BOOST_ROOT=<path>/boost_1_59_0 …

返回列表