Boost---在Windows上的入门(2)

4  使用 Boost建立一个简单的程序


为简单起见,让我们开始使用仅有头文件的库。下面的程序从标准输入中读取一个整数序列,使用 Boost.Lambda,每个数字乘以三,和将它们写到标准输出︰

#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) << " " );
}
将此程序的文本复制到名为example.cpp的文件.

注意

打造本指南中的示例,您可以使用集成开发环境 (IDE),它像 Visual Studio 中,或您可以发布命令从命令提示符。既然每个 IDE 和编译器有不同的选项和微软的是迄今为止在 Windows 上占主导地位的编译器,我们只给特定方向在这里为 Visual Studio 2005 和.NET 2003 Ide 和他们各自的命令提示符编译器 (使用命令提示符是有点更简单)。如果你正在使用另一个编译器或 IDE,它应该是比较容易适应这些指令传递给您的环境。

4.1 建立从 Visual Studio IDE


从 Visual Studio文件菜单中,选择新建>项目......
在生成的新项目对话框的左侧窗格中,选择Visual c + + > Win32.
在右侧窗格中,选择Win32 控制台应用程序(VS8.0) 或Win32 控制台项目(VS7.1)。
在名称字段中,输入"示例"

用鼠标右键单击解决方案资源管理器窗格中的示例并从显示的弹出菜单中选择属性
在配置属性> C/c + + >一般>附加包含目录,例如到提振根目录下,输入的路径

 C:\Program Files\boost\boost_1_63_0

在配置属性> C/c + + >预编译头,将使用预编译头 (/Yu)更改为不使用预编译头.2
替换的example.cpp与上面的示例代码 IDE 生成的内容。
从生成菜单中,选择生成解决方案.
若要测试您的应用程序,按 F5 键并输入一下内容的在结果窗口中,并且输出返回值︰
1 2 3
然后按住 control 键并按"Z",然后按返回键。

命令提示符基础知识

在 Windows 中,键入它的名称,可以依次进入命令提示符窗口并按返回 (或输入) 的关键参数,调用一个命令行工具。

若要打开一个通用的命令提示符下,单击开始菜单按钮,单击运行,键入"cmd",然后单击确定.

当前目录中的文件系统范围内执行的所有命令。若要设置当前目录,请键入︰

cd path\to\some\directory
path\to\some\directory

随后返回。例如,

 

4.2,或从命令提示符处生成

从您的计算机的启动菜单中,如果你是 Visual Studio 2005 的用户,请选择

所有程序Microsoft Visual Studio 2005 >  Visual Studio 工具Visual Studio 2005 命令提示

或者,如果你是一个 Visual Studio.NET 2003年用户选择

所有程序Microsoft Visual Studio.NET 2003年Visual Studio.NET 工具Visual Studio.NET 2003年命令提示符

提出了为 Visual Studio 编译器设置一个特殊的命令提示符窗口。在该窗口中,将当前目录设置为一个合适的位置,用于创建一些临时文件并键入以下命令,然后按回车键︰

cl /EHsc /I path\to\boost_1_63_0 path\to\example.cpp
path\to\boost_1_63_0 path\to\example.cpp

若要测试结果,请键入︰

echo 1 2 3 | example

4.3 错误和警告

    如果你看到在 Boost 头文件来自编译器警告,不要惊慌。我们设法消除他们,但这样做所以并不总是实用。4 错误是另一回事。如果您在本教程中看到编译错误在这一点上,检查并确保您已经正确地复制示例程序和你已经正确地确定boost根目录.

5 准备使用boost二进制库

如果你想要使用任何单独编译的 Boost 库,你需要获得boost的二进制文件。

5.1 简化生成来源

如果你想要从 Visual c + + 源代码构建软件,您可以使用本节中介绍的简单生成过程。打开命令提示符并将您的当前目录更改为boost根目录。然后,键入以下命令︰
bootstrap
.\b2
第一个命令准备使用的 Boost.Build 系统。第二个命令调用 Boost.Build 打造单独编译的 Boost 库。请参阅Boost.Build 文件允许选项的列表。

5.2 或生成二进制文件来源

如果您使用的早期版本的 Visual c + + 或从其他供应商的编译器,你将需要使用Boost.Build来创建您自己的二进制文件。

5.2.1 安装 Boost.Build

Boost.Build是一个基于文本的系统开发,测试,和安装软件。首先,您需要生成并安装它。要此操作︰

1.进入目录tools\build\..
2.运行bootstrap.bat
3.运行b2 install --prefix=PREFIX PREFIX是Boost.Build 要安装的目录
4.将PREFIX\bin添加到您的 PATH 环境变量。

5.2.2 确定你的工具集

首先,查找对应于您在下表 (最新列表始终是可用的 Boost.Build 文档中的编译器工具集).
注意

如果您以前选择一个工具集,用于建设 b2的目的,你应该假设它不会工作,并从下表选择新。

工具集名称 供应商 备注
行政协调会 惠普公司 只有已知的最近版本一起提升
borland Borland  
科莫 科摩计算 使用此工具集可能需要配置另一个工具集来作为它的后端。
达尔文 苹果电脑公司 苹果的版本的 GCC 工具链与达尔文和 MacOS X 功能,如框架支持。
海湾合作委员会 Gnu 项目 包括对 Cygwin 和 MinGW 编译器的支持。
hp_cxx 惠普公司 针对 Tru64 操作系统。
英特尔 英特尔  
msvc 微软  
太阳 Oracle 只有已知的最近版本一起提升。注意,Oracle/Sun 编译器有大量的选项的效果二进制兼容性︰ 至关重要的是库的构建与你的应用将使用相同的选项。特别是要注意,默认标准库不能很好的提升,除非您正在生成的 C + + 11。你需要可以注入与 b2 命令行选项的特定编译器选项会 = ', ' linkflags =。为打造与 Apache 标准库的 C + + 03 模式的示例使用b2会 = 图书馆 = stdcxx4 linkflags = 图书馆 = stdcxx4 .
vacpp IBM VisualAge c + + 编译器。


如果你有一个特定的编译器安装的多个版本,您可以附加工具集名称,前面有一个连字符,例如英特尔 9.0或borland 5.4.3版本号码。在 Windows 中,追加一个版本号,即使你只有一个版本安装(除非您使用 msvc 或 gcc 的工具集,有特殊的版本检测代码) 或自动链接将失败。

5.2.3 选择生成目录

Boost.Build将它建设成为以生成目录时生成的所有中间文件。如果你提升根目录是可写的这一步并不是严格必要︰ 默认情况下 Boost.Build 将创建一个bin.v2/子目录为此目的在你当前的工作目录中。

5.2.4 调用b2

将您的当前目录更改为提振根目录并调用b2 ,如下所示︰
b2 --build-dir=build-directory toolset=toolset-name --build-type=complete stage
这些和其他调用选项的完整说明,请参阅Boost.Build 文档.
例如,您的会话可能如下所示︰3
C:\WINDOWS> cd C:\Program Files\boost\boost_1_64_0
C:\Program Files\boost\boost_1_64_0> b2 ^
More? --build-dir="C:\Documents and Settings\dave\build-boost" ^
More? --build-type=complete msvc stage
务必阅读本说明关于外观的^,More? 和引号 ('") 在那条线。
选择"— — 生成类型 = 完成"Boost.Build 导致生成所有支持变型的库。有关如何构建只有特定变异的说明,请在Boost.Build 邮件列表.
建立特殊阶段目标提振树的阶段\lib\子目录中地方提升图书馆的二进制文件。若要使用不同的目录传递— — stagedir = b2 目录选项.
注意
b2是区分大小写;它是重要粗体上面所示的所有部分都被完全小写。
你可以通过调用b2时其他选项的描述,请键入︰
b2 --help
尤其是,若要限制的建设花费的时间量,你可能感兴趣︰
审查的库名称列表— — 显示库
限制哪些库获得装有— — 与-库名称或— — 没有-库名称选项
选择通过命令行添加释放或调试的 variant 类型的特定生成。
注意
Boost.Build 可以产生大量的输出,可以使它容易被忽略的问题。如果你想要确保一切都很顺利,你可能会将输出重定向到一个文件中通过附加"> build.log 2 > & 1"到您的命令行。

5.3 预期生成输出

在建筑的 Boost 库的过程中,你可以期望看到一些消息输出到控制台上。这些可能包括
提升图书馆配置的通告 — — 例如,正则表达式库输出有关 ICU 时建造非 Unicode 支持的消息和 Python 库可以跳过不会出现错误 (但与通知) 如果你没有安装的 Python。
消息从生成工具的数量指标,建造或者跳过该报告。不要惊讶,如果这些数字没有意义到你;有很多的目标,每个图书馆。
生成行动消息描述该工具干什么,,看起来就像︰
toolset-name.c++ long/path/to/file/being/built
编译器警告。

5.4 在的情况下生成错误

你看到时建设提升的唯一错误消息 — — 如果任何 — — 应与有关的 IOStreams 图书馆支持 zip 和 bzip2 格式作为描述在这里。如果你需要这些功能,请安装 libz 和 libbz2 的有关发展软件包。其他错误生成的 Boost 库时都是令人担忧。
如果它看起来像你的编译器或链接器生成系统找不到,,考虑用户文件作为描述在这里成立。如果这不是你的问题或用户文件不适合你,请解决疑问为您到Boost.Build 邮件列表的编译器配置提升.

6 到 Boost 库链接您的程序

为了演示与 Boost 二进制库链接,我们将使用以下简单的程序,提取电子邮件的主题行。它使用Boost.Regex库,其中有单独编译的二进制组件。

#include <boost/regex.hpp>
#include <iostream>
#include <string>

int main()
{
    std::string line;
    boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" );

    while (std::cin)
    {
        std::getline(std::cin, line);
        boost::smatch matches;
        if (boost::regex_match(line, matches, pat))
            std::cout << matches[2] << std::endl;
    }
}
有与链接关联的两个主要挑战︰

工具配置,例如选择命令行选项或 IDE 生成设置。
确定库二进制,所有生成的变体,其编译配置是项目的符合你的其余部分。
自动链接

大多数 Windows 编译器和链接器有所谓"自动链接的支持,"从而消除了第二个挑战。升压头文件中的特殊代码检测您的编译器选项并使用该信息来将正确的库的名称编码到您的对象文件;链接器从你告诉它要搜索的目录来选择具有该名称的库。

GCC 工具链 (Cygwin 和 MinGW) 是明显的例外;海合会用户应该参考链接说明 Unix 变体的操作系统为要使用的适当的命令行选项。

从 Visual Studio IDE 中的 6.1 链接

我们先前创建入手仅邮件头示例项目︰
用鼠标右键单击解决方案资源管理器窗格中的示例并从显示的弹出菜单中选择属性
在配置属性>链接器>附加库目录,输入的路径如boost库,例如C:\Program Files\boost\boost_1_64_0\lib\.
从生成菜单中,选择生成解决方案.

6.2 版或从命令提示符下的链接

例如,我们可以编译和链接上面的程序中从 Visual c + + 命令行只需向我们早些时候,用假设你的boost库文件在C:\Program Files\boost\boost_1_64_0\lib的命令行添加下面以粗体文本:
cl /EHsc /I path\to\boost_1_64_0 example.cpp   ^
     /link /LIBPATH:C:\Program Files\boost\boost_1_64_0\lib

6.3 图书馆命名

注意
如果像 Visual c + + 编译器支持自动链接,或许你也可以跳到下一步.
以选择为您生成配置,您需要知道如何命名boost库文件的正确的二进制文件。每个库文件名由通用序列描述它如何建成的元素组成。例如,可以将libboost_regex-vc71-mt-d-1_34.lib分解成以下元素︰
lib
前缀︰ 除了在 Microsoft Windows 上,每个boost名称始于此字符串。在 Windows 上,只有普通的静态库使用lib前缀;导入库和 Dll 不这样做。5
boost_regex
库名称︰ 所有刺激库文件名都以boost_开始.
-vc71
工具集标签︰ 标识的工具集和用于生成二进制文件的版本。
-mt
线程标记︰ 指示库建成启用多线程处理支持。可以通过-mt缺乏判断没有多线程支持.
-d
ABI 标签︰ 编码影响与其他已编译的代码库的互操作性的细节。对于每个这种功能,一封信被添加到标记︰

关键 使用此库时︰ Boost.Build 选项
s 静态链接到 c + + 标准库和编译器运行时支持库。 运行时链接 = 静态
g 使用标准和运行时支持库的调试版本。 运行时调试上 =
y 使用特殊的调试的 Python 版本. python 调试上 =
d 生成调试版本的代码。6 备选案文 = 调试
p 与您的编译器使用 STLPort 标准库,而不是一个提供默认值。 内核 = stlport
例如,如果您生成调试版本的代码,以使用 STLPort 标准库中"本机 iostreams"模式与静态运行时库的调试版本,标记如下所示:  -sgdpn。如果没有上述应用,ABI 标记是给。
-1_34
版本标记︰ 充分提振发布版本号,取而代之的是下划线的时期。例如,版本 1.31.1 将标记为"-1_31_1"。
.lib
扩展︰ 根据操作系统的惯例确定。在大多数 unix 风格平台上扩展分别.a和.so (档案) 静态库和共享的库。在 Windows 上, .dll表示一个共享的库, .lib表示静态或导入图书馆。地方的支持下对 unix 变体的工具集,添加了完整版扩展名 (例如"。 so.1.34"),还将创建一个符号链接到的库文件,而不是尾随的版本号,命名为。
6.4 测试程序


若要测试我们的主题提取,我们将筛选以下的文本文件。复制它从您的浏览器并将其保存为jayne.txt:


To: George Shmidlap
From: Rita Marlowe
Subject: Will Success Spoil Rock Hunter?
---
See subject.
现在,请在命令提示符窗口中,键入︰


path\to\compiled\example < path\to\jayne.txt
该程序应作出回应,电子邮件主题,"会成功破坏岩石猎人吗?"


7 结论和进一步的资源


你提升并将您的程序的介绍到此结束。当你开始认真使用 Boost,肯定有几个额外的点,你会希望我们已经走了。有一天我们可能会有"书 2 中使用入门系列",解决他们。在那之前,我们建议你追求以下资源。如果你找不到你需要什么,或者还有什么我们可以做些更清楚此文档,请它向发帖提升用户邮件列表.


Boost.Build 参考手册
提升用户邮件列表
Boost.Build 邮件列表
所有的 Boost 库文档的索引
前进


好运气,和乐趣 !


— — 提升开发人员


[1] 我们推荐下载boost_1_64_0.7z和使用7-zip解压它。我们不再推荐.zip 文件为推动因为他们是两倍等效.7z 文件一样大。我们不推荐使用 Windows 的内置减压,因为它可以为大型档案缓慢而痛苦。
[2] 提高使用预编译头; 没有问题这些指令只是避免预编译头文件,因为它需要对源代码的示例中使用的视觉工作室具体变化。
[3]
在此示例中,插入符号字符^是一种在多个行上,继续命令,并且必须用线上待续的最后一个字符(即不遵循它用空格)。命令提示符下以响应更多?提示输入更多的投入。随意省略插入符号和随后换行;我们使用他们,因此该示例将适合的合理宽度的网页。


命令提示符对待每一位空白在命令中作为参数分隔符。这意味着引号 ('") 将文本放在一起,每当一个单一的命令行参数包含空格,如所需


--build-dir="C:\Documents_and_Settings\dave\build-boost"
同时,举个例子,你也无法添加的=标志作为周围的空间


--build-dir_=_"C:\Documents and Settings\dave\build-boost"
[4] 请记住,警告是特定于每个编译器实现。给定的 Boost 库的开发人员可能没有访问到您的编译器。一些警告,也极难消除在泛型代码,它在哪里不值得这么麻烦点。最后,某些编译器没有任何源代码代码机制抑制警告。
[5] 本公约区别从导入库的 Boost 库的静态版本配置相同的刺激 dll 否则会具有相同的名称。
[6] 这些库都没有优化编译或内联,完整的调试符号启用,与无调试 #defined。虽然这是真的,有时,这些选择不会影响其他已编译的代码的二进制兼容性,你不能指望那与 Boost 库。
[7] STLPort 此功能已被否决,因为它是不可能使它透明地工作给用户;我们不建议这样。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
首先,你需要安装Boost和Python以及Boost.Python库。然后,按照以下步骤操作: 1. 编写C++代码并使用Boost.Python库将其封装为Python模块。 例如,以下是一个简单的C++代码示例: ```c++ #include <boost/python.hpp> char const* greet() { return "Hello, world!"; } BOOST_PYTHON_MODULE(example) { using namespace boost::python; def("greet", greet); } ``` 这个代码定义了一个名为"greet"的函数,返回一个字符串,然后使用Boost.Python库将其封装为Python模块。 2. 使用CMake创建项目并将其编译为pyd文件。 为了编译生成pyd文件,你需要使用CMake来创建项目,使用Boost和Python的头文件和库文件,并将C++代码编译为pyd文件。 以下是一个CMakeLists.txt文件示例: ```cmake cmake_minimum_required(VERSION 3.0) project(example) find_package(Boost REQUIRED COMPONENTS python) find_package(PythonLibs REQUIRED) include_directories(${Boost_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS}) link_directories(${Boost_LIBRARY_DIRS}) add_library(example SHARED example.cpp) target_link_libraries(example ${Boost_LIBRARIES} ${PYTHON_LIBRARIES}) set_target_properties(example PROPERTIES SUFFIX ".pyd") ``` 这个文件指定了编译项目所需的Boost和Python库,将C++代码编译为pyd文件,并设置pyd文件的后缀名为".pyd"。 3. 编译并生成pyd文件。 使用以下命令编译项目: ``` cmake . make ``` 这将生成名为"example.pyd"的文件,可以在Windows上使用Python调用。 注意:在Windows上,你需要将Boost库和Python库添加到PATH环境变量中,或者将它们复制到生成的pyd文件所在的目录中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道格拉斯范朋克

播种花生牛奶自留田

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值