Boost(1.69.0) windows入门(译)
缩进2字符
.yindent,
.yblock{
padding: 1em 1em 0 1em;
margin-right:0;
}
.yindent{
margin:0.7em 2em;
border:medium outset;
}
.yblock{
margin:0em 2em 0.7em;
padding:0;
}
.yhelper{
margin-left: 1em;
border: medium outset;
padding: 1em;
background-color: #ffffee;
width: 40%;
float: right;
}
Boost windows入门
基于版本1.69.0
1. 获得Boost源代码
获取Boost副本最好的方法是下载boost_1_69_0.7z或boost_1_69_0.zip并解压缩以安装完整的Boost发行版。
2. Boost源代码组织 The Boost Distribution
这是Boost目录结构草图:
boost_1_69_0 \ ........................ “boost根目录”
index.htm ................ 这是www.boost.org的副本
boost \ ......................... 所有Boost 头文件
lib \ .......................... 预编译库二进制文件
libs\ ................. 测试,.cpps,docs等,通过库
index.html ..................... 库文档从这里开始
algorithm\
any \
array \
...更多库...
status\ .........................Boost-wide测试套件
tools\ ........... 实用工具,例如Boost.Build,quickbook,bcp
more \ ................................. 政策文件等
doc \ ........................ 所有Boost库文档的子集
Boost库头的组织并不完全统一,但大多数库遵循以下几种模式:
一些较旧的库和大多数非常小的库将所有公共头文件直接放入
boost\
。大多数库的公共头文件都位于
boost\
的子目录中,以库命名。例如,您将在中找到Python库的def.hpp
标头
. boost\python\def.hpp.
- 有些库在
boost\
中有一个“聚合头”,即#include
所有库的其他头文件。例如,Boost.Python
的聚合头是
. boost\python.hpp.
- 大多数库将私有头放在名为
detail\
或aux_\
的子目录中。不要指望在这些目录中找到任何可以使用的东西。
重要的是要注意以下几点:
- boost根目录(boost root directory)(通常是
C:\Program Files\boost\boost_1_69_0
)有时在boost文档和邮件列表中也称为$BOOST_ROOT
。 - 要在Boost中编译任何内容,您需要在
include
目录中包含boost\
子目录。 在Microsoft Visual Studio
中设置include
路径的具体步骤将在本文档的后面部分中介绍; 如果您使用其他IDE,请参阅产品文档以获取相关说明。 - 由于所有Boost头文件都具有
.hpp
扩展名,并且位于boost根目录下的boost\
子目录中,因此你的Boost#include
指令将如下所示:
#include <boost/whatever.hpp>
或
#include "boost/whatever.hpp"
取决于您对使用尖括号的偏好包括。即使是Windows用户也可以(并且出于可移植性的原因,可能)在#include
指令中使用正斜杠(forward slashes); 你的编译器不关心。
- 不要被
doc\
子目录分散注意力; 它只包含Boost文档的子集。如果要查看完整的文件,从libs\index.html
开始。
3. 仅用头文件的库 Header-Only Libraries
许多人想要知道的第一件事是,“我如何构建Boost?”好消息是,通常没有什么可构建的。
大多数Boost库只是头文件:它们完全由包含模板和内联函数的头文件组成,并且在链接时不需要单独编译的库二进制文件或特殊处理。
必须单独构建的Boost库是:
- Boost.Chrono
- Boost.Context
- Boost.Filesystem
- Boost.GraphParallel
- Boost.IOStreams
- Boost.Locale
- Boost.Log (see build documentation)
- Boost.MPI
- Boost.ProgramOptions
- Boost.Python (see the Boost.Python build documentation before building and installing it)
- Boost.Regex
- Boost.Serialization
- Boost.Signals
- Boost.System
- Boost.Thread
- Boost.Timer
- Boost.Wave
一些库具有可选的单独编译的二进制文件:
- Boost.DateTime有一个二进制组件,只有在使用其
to_string/from_string
或序列化功能时才需要,或者如果你的目标是Visual C ++ 6.x
或Borland
。 - Boost.Graph 有一个二进制组件,只有在你打算
解析GraphViz文件
时才需要它。 - Boost.Math具有TR1和C99 cmath函数的二进制组件。
- Boost.Random有一个二进制组件,只有在你使用
random_device
时才需要它。 - Boost.Test可用于“仅标题”或“单独编译”模式,但建议单独编译以供严肃使用。
- Boost.Exception为32位
_MSC_VER == 1310
和_MSC_VER == 1400
提供了exception_ptr的非侵入式实现,这需要单独编译的二进制文件。这是由#define BOOST_ENABLE_NON_INTRUSIVE_EXCEPTION_PTR
启用的。
4. 使用Boost构建一个简单的程序 Build a Simple Program Using Boost
为了简单起见,我们首先使用仅限标头的库。以下程序从标准输入读取整数序列,使用Boost.Lambda
将每个数字乘以3,并将它们写入标准输出:
#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
的文件中。
要构建本指南中的示例,您可以使用Visual Studio等集成开发环境(IDE),也可以从命令提示符发出命令。由于每个IDE和编译器都有不同的选项,而微软是迄今为止Windows上的主要编译器,我们只为Visual Studio 2005和.NET 2003 IDE以及它们各自的命令提示符编译器提供了具体指示(使用命令提示符稍微简单一点)。如果您使用的是其他编译器或IDE,则可以相对轻松地将这些指令调整到您的环境中。
4.1 使用Visual Studio IDE构建
在Windows中,通过在命令提示符窗口中键入其名称(后跟可选参数)并按Return(或Enter)键来调用命令行工具。
若要打开通用命令提示符,请单击“开始”
菜单按钮,单击“运行”
,键入“cmd”
,然后单击“确定”
。
所有命令都在文件系统中当前目录
的上下文中执行。要设置当前目录
,请键入:
. cd /d path\to\some\directory
然后返回。例如,
. cd /d E:\dev\VS2017\boost_1_69_0
通过在除最后一行之外的所有行的末尾键入插入符号(^),可以在多行中继续执行长命令。本文的一些示例使用该技术来节省水平空间。
- 从Visual Studio 2017的“文件”菜单中,选择“新建” > “项目”...
- 在生成的“新建项目”对话框的左侧窗格中,选择“已安装” > “Visual C++” > “Windows桌面”。
- 在右侧窗格中,选择
Win32控制台应用程序
。 - 在名称字段中,输入
example_boost
- 右键单击“解决方案资源管理器”窗格中的
example_boost
,然后从弹出的菜单中选择“属性” - 在 “配置属性” > “C/C++” > “常规” > “其他包含目录” 中,输入Boost根目录的路径
E:\dev\VS2017\boost_1_69_0
- 在“配置属性” > “C/C++” > “预编译标题”中,将“使用预编译标题(/Yu)”更改为“不使用预编译标题”。
- 使用上面的示例代码替换IDE生成的example.cpp的内容。
- 从Build菜单中,选择Build Solution。
要测试您的应用程序,请按F5键并在结果窗口中键入以下内容,然后按Return键:
1 2 3
然后按住控制键并按“Z”,然后按Return键。
4.2 从命令提示符构建 Or, Build From the Command Prompt
从计算机的“开始”菜单中,如果您是Visual Studio 2017用户,请选择
. Visual Studio 2017 > 适用于 VS 2017 的 x64 本机工具命令提示
为Visual Studio编译器调出一个特殊的命令提示符窗口。在该窗口中,将当前目录设置为适合创建一些临时文件的位置,然后键入以下命令,后跟Return键:
cl /EHsc /I E:\dev\VS2017\boost_1_69_0 D:\Users\yaoyu\source\repos\example_boost\example_boost\example_boost.cpp
要测试结果,请键入:
echo 1 2 3 | example_boost
4.3 错误和警告 Errors and Warnings
如果您看到源自Boost头文件的编译器警告,请不要惊慌。我们试图消除它们,但这样做并不总是实用的。错误是另一回事。如果您在本教程中看到编译错误,请检查以确保您已正确复制示例程序并且已正确识别Boost根目录
。
5 准备使用Boost Library Binary
如果要使用任何单独编译的Boost库,则需要获取库二进制文件。
5.1 使用源代码简单构建
如果您希望使用Visual C++从源代码构建,可以使用本节中描述的简单构建过程。打开命令提示符并将当前目录更改为Boost根目录(Boost root directory)
。然后,键入以下命令:
bootstrap
.\b2
第一个命令准备Boost.Build
系统以供使用。第二个命令调用Boost.Build
来构建单独编译的Boost库。有关允许的选项列表,请参阅Boost.Build文档。
5.2 从源构建二进制文件
如果您使用的是早期版本的Visual C++或其他供应商的编译器,则需要使用Boost.Build来创建自己的二进制文件。
5.2.1 安装Boost.Build
Boost.Build是一个基于文本的系统,用于开发,测试和安装软件。首先,您需要构建并安装它。步骤如下:
- 转到目录
tools\build\
。 - 运行
bootstrap.bat
- 运行
b2 install --prefix=PREFIX
, 其中PREFIX是您希望安装Boost.Build的目录 - 将
PREFIX\bin
添加到PATH
环境变量中。
5.2.2 确定工具集 Identify Your Toolset
首先,在下表中找到与编译器对应的工具集(Boost.Build文档中始终提供最新列表)。
如果您之前为了构建b2而选择了一个工具集,那么您应该假设它不起作用,而是从下表中新选择。
Toolset Name |
Vendor | Notes |
---|---|---|
acc | Hewlett Packard | Only very recent versions are known to work well with Boost |
borland | Borland | |
como | Comeau Computing | Using this toolset may require configuring another toolset to act as its backend. |
darwin | Apple Computer | Apple's version of the GCC toolchain with support for Darwin and MacOS X features such as frameworks. |
gcc | The Gnu Project | Includes support for Cygwin and MinGW compilers. |
hp_cxx | Hewlett Packard | Targeted at the Tru64 operating system. |
intel | Intel | |
msvc | Microsoft | |
sun | Oracle | Only very recent versions are known to work well with Boost. Note that the Oracle/Sun compiler has a large number of options which effect binary compatibility: it is vital that the libraries are built with the same options that your appliction will use. In particular be aware that the default standard library may not work well with Boost, unless you are building for C++11. The particular compiler options you need can be injected with the b2 command line options cxxflags=``and ``linkflags=. For example to build with the Apache standard library in C++03 mode use b2 cxxflags=-library=stdcxx4 linkflags=-library=stdcxx4. |
vacpp | IBM | The VisualAge C++ compiler. |
如果安装了特定编译器的多个版本,则可以将版本号附加到工具集名称,后面加一个连字符,例如intel-9.0或borland-5.4.3。在Windows上,即使您只安装了一个版本(除非您使用的是具有特殊版本检测代码的msvc或gcc工具集),否则auto-linking
会失败。
5.2.3 选择构建目录 Select a Build Directory
Boost.Build会将构建时生成的所有中间文件放入构建目录(build directory)中。如果您的Boost根目录是可写的,则此步骤不是必需的:默认情况下,Boost.Build将在您当前的工作目录中为此创建bin.v2/
子目录。
5.2.4 调用b2 Invoke b2
将当前目录更改为Boost根目录
, 并按如下方式调用b2:
b2 --build-dir=build-directory toolset=toolset-name --build-type=complete stage
有关这些和其他调用选项的完整说明,请参阅Boost.Build文档。
例如,您的会话可能如下所示:
C:\WINDOWS> cd /d C:\Program Files\boost\boost_1_69_0
C:\Program Files\boost\boost_1_69_0> b2 ^
More? --build-dir="C:\Documents and Settings\dave\build-boost" ^
More? --build-type=complete msvc stage
请务必阅读关于^, More?
和该行中的引号(“)的说明。
选项 --build-type=complete 会让Boost.Build构建所有支持的库版本。有关如何仅构建特定版本的说明,请在Boost.Build邮件列表中查询。
构建特殊阶段(stage)
目标将Boost库二进制文件放在Boost树的stage\lib\
子目录中。要使用其他目录,请将--stagedir=directory
选项传递给b2。
b2区分大小写; 重要的是,上面以粗体显示的所有部件都是完全小写的。
有关在调用b2时可以传递的其他选项的说明 ,请键入:
b2 --help
特别是,为了限制建设所花费的时间,您可能会对以下内容感兴趣:
- 使用
--show-libraries
查看库名列表 - 使用
--with-library-name
或--without-library-name
选项选择要构建(或不构建)的库 - 通过向命令行添加
release
或debug
来选择特定的构建版本。
Boost.Build可以产生大量的输出,这可以很容易地错过问题。如果要确保一切顺利,可以通过在命令行中附加 > build.log 2>&1
将输出重定向到文件中。
5.3 预期的构建输出 Expected Build Output
在构建Boost库的过程中,您可以期望在控制台上看到一些消息。这些可能包括
- 关于Boost库配置的注意事项 - 例如,Regex库在没有Unicode支持的情况下生成有关ICU的消息,如果没有安装Python,可以跳过Python库而不会出现错误(但需要注意)。
- 来自构建工具的消息,用于报告已构建或跳过的目标数。如果这些数字对你没有任何意义,不要感到惊讶; 每个库有很多目标。
- 构建描述工具正在做什么的动作消息,如下所示:
toolset-name.c++ long/path/to/file/being/built
- 编译器警告。
5.4 在构建错误的情况下 In Case of Build Errors
在构建Boost时看到的唯一错误消息(如果有的话)应该与IOStreams
库对zip和bzip2格式的支持有关。如果需要这些特性,请安装libz和libbz2的相关开发包。构建Boost库时的其他错误也值得关注。
如果它看起来像编译系统无法找到你的编译器和/或连接器,考虑设置一个user-config.jam
文件。如果这不是您的问题或user-config.jam
文件不工作,请解决有关将编译器的Boost配置到Boost.Build邮件列表的问题。
6 将您的程序链接到Boost Library
为了演示与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编译器和链接器都具有所谓的“自动链接支持”(auto-linking support),这消除了第二个挑战。Boost头文件中的特殊代码检测您的编译器选项,并使用该信息将正确库的名称编码到目标文件中; 链接器从您告诉它搜索的目录中选择具有该名称的库。
GCC工具链(Cygwin和MinGW)是值得注意的例外; GCC用户应参考linking instructions for Unix variant OSes,以获取相应的命令行选项。
6.1 从Visual Studio IDE中链接
从我们之前创建的仅头文件example
项目开始:
- 右键单击“解决方案资源管理器”窗格中的
example
,然后从弹出的菜单中选择“属性” - 在
配置属性
>链接器
>附加库目录
中,输入Boost二进制文件的路径,例如E:\dev\VS2017\boost_1_69_0\lib64-msvc-14.1
。 - 从Build菜单中,选择Build Solution。
6.2 从命令提示符链接
例如,假设您的Boost二进制文件位于E:\dev\VS2017\boost_1_69_0\lib64-msvc-14.1
中,我们可以通过简单地将下面的粗体文本添加到我们之前使用的命令行,从Visual C++命令行编译和链接上述程序。:
cl /EHsc /I E:\dev\VS2017\boost_1_69_0 example_boost.cpp ^
/link /LIBPATH:E:\dev\VS2017\boost_1_69_0\lib64-msvc-14.1
6.3 库命名 Library Naming
如果像Visual C++一样,您的编译器支持自动链接,您可以跳到下一步。
为了配置正确的二进制文件,您需要知道Boost二进制文件是如何命名的。每个库文件名由一组共同的元素序列组成,这些元素描述了它的构建方式。例如,libboost_regex-vc71-mt-d-x86-1_34.lib
可以分解为以下元素:
lib
boost_regex
-vc71
-mt
-d
Key | Use this library when: | Boost.Build option |
---|---|---|
s | linking statically to the C++ standard library and compiler runtime support libraries. |
runtime-link=static |
g | using debug versions of the standard and runtime support libraries. | runtime-debugging=on |
y | using a special debug build of Python. | python-debugging=on |
d | building a debug version of your code.6 | variant=debug |
p | using the STLPort standard library rather than the default one supplied with your compiler. |
stdlib=stlport |
例如,如果构建代码的调试版本以用于静态运行时库和STLPort标准库的调试版本,则标记将为:-sgdp
。如果以上都不适用,则省略ABI标记。
-x86
Key | Architecture | Boost.Build option |
---|---|---|
x | x86-32, x86-64 | architecture=x86 |
a | ARM | architecture=arm |
i | IA-64 | architecture=ia64 |
s | Sparc | architecture=sparc |
m | MIPS/SGI | architecture=mips* |
p | RS/6000 & PowerPC | architecture=power |
字母后面的两位数字对地址模型进行编码,如下所示:
Key | Address model | Boost.Build option |
---|---|---|
32 | 32 bit | address-model=32 |
64 | 64 bit | address-model=64 |
-1_34
.lib
6.4 测试 Test Your Program
为了测试我们的主题提取,我们将过滤以下文本文件。将其从浏览器中复制并保存为jayne.txt
:
To: George Shmidlap
From: Rita Marlowe
Subject: Will Success Spoil Rock Hunter?
---
See subject.
现在,在命令提示符窗口中,键入:
path\to\compiled\example < path\to\jayne.txt
D:\Users\yaoyu\source\repos\example_boost\example_boost>example_boost.exe < jayne.txt
程序应输出电子邮件主题, “Will Success Spoil Rock Hunter?”
7 结论和进一步的资源 Conclusion and Further Resources
最后介绍了Boost并将其与您的程序集成。当你开始认真地使用Boost时,肯定会有一些你希望我们覆盖的额外点。有一天,我们可能会在“入门系列”中找到“第2册”来解决这些问题。在此之前,我们建议您继续使用以下资源。如果您无法找到所需内容,或者我们可以采取任何措施使此文档更加清晰,请将其发布到Boost用户的邮件列表中。
祝好运并玩得开心点! Good luck, and have fun!
— the Boost Developers
Boost(1.69.0) windows入门(译)的更多相关文章
- Linux:编译安装boost 1.69库
Boost库是为C++语言标准库提供扩展的一些C++程序库的总称,由Boost社区组织开发.维护.在C++的地位感觉可以和Spring在Java中相比. boost向来有准标准库之称,很多新特性例如智 ...
- 【数据库】3.0 MySQL入门学习(三)——Windows系统环境下MySQL安装
1.0 我的操作系统是window10 专业版 64位.,不过至少windows7以上系统都是一样的. 关于MySQL如何下载,请参考博文: [数据库]2.0 如何获得MySQL以及MySQL安装 h ...
- windows 10 上源码编译boost 1.66.0 | compile boost 1.66.0 from source on windows 10
本文首发于个人博客https://kezunlin.me/post/854071ac/,欢迎阅读! compile boost 1.66.0 from source on windows 10 Ser ...
- 【转】Zabbix 3.0 从入门到精通(zabbix使用详解)
[转]Zabbix 3.0 从入门到精通(zabbix使用详解) 第1章 zabbix监控 1.1 为什么要监控 在需要的时刻,提前提醒我们服务器出问题了 当出问题之后,可以找到问题的根源 网站/ ...
- 玩转Windows服务系列——使用Boost.Application快速构建Windows服务
玩转Windows服务系列——创建Windows服务一文中,介绍了如何快速使用VS构建一个Windows服务.Debug.Release版本的注册和卸载,及其原理和服务运行.停止流程浅析分别介绍了Wi ...
- boost 1.56.0 编译及使用
boost的编译和使用,经过搜集资料和总结,记录成文.感谢文后所列参考资料的作者. 1 下载 地址:http://sourceforge.net/projects/boost/files/boost/ ...
- Boost 1.61.0 Library Documentation
http://www.boost.org/doc/libs/1_61_0/ Boost 1.61.0 Library Documentation Accumulators Framework for ...
- 【数据库】4.0 MySQL入门学习(四)——linux系统环境下MySQL安装
1.0 我的操作系统是CentOS Linux release 7.6.1810 (Core) 系统详细信息如下: Linux version 3.10.0-957.1.3.el7.x86_64 ( ...
- Windows 入门杂乱无章版
windows入门 /users/username/appdata/roaming/microsoft/windows/start menu/startup目录中的应用程序是在该用户登录时启动的 /w ...
随机推荐
- (六)python3 字符串常用方法
字符串截取 >>>s = 'hello' >>>s[0:3] 'he' >>>s[:] #截取全部字符 'hello' 消除空格及特殊符号 ...
- Android写入到mysql里的中文总是乱码?
中文编码的问题总是让人头疼,之前在python爬虫就折腾得死去活来,现在写app又是这样. 总结下来,就是三点吧: 数据库: 确定字符编码是utf8, collate: utf8_general_ci ...
- save density, pressure, velocity, temperature contour at one slice in xy plane-- paraview with batch Python scripts
#### import the simple module from the paraviewfrom paraview.simple import *#### disable automatic c ...
- POJ - 2007 极角排序(Java 实现)
POJ 2007 将所有的点按逆时针输出 import java.io.*; import java.util.*; public class Main { static class Point im ...
- 2.5.4 华丽的 printf 输出
如同echo命令,printf命令可以输出简单的字符串: [many@avention my_sh]$ printf "Hello, world\n" ...
- 深刻理解Python中的元类(metaclass)--代码实践
根据http://blog.jobbole.com/21351/所作的代码实践. 这篇讲得不错,但以我现在的水平,用到的机会是很少的啦... #coding=utf-8 class ObjectCre ...
- 洛谷——P1720 月落乌啼算钱
题目背景 (本道题目木有以藏歌曲……不用猜了……) <爱与愁的故事第一弹·heartache>最终章. 吃完pizza,月落乌啼知道超出自己的预算了.为了不在爱与愁大神面前献丑,只好还是硬 ...
- RAC 设置archive log模式
首先设置 archive log的位置 SQL> alter system set log_archive_dest='+DATA/orcl/archive/'; System altered. ...
- Mentor.Graphics.FloTHERM.XT.2.3+Mentor.Graphics.Flowmaster.7.9.4
Mentor.Graphics.FloTHERM.XT.2.3 Mentor.Graphics.Flowmaster.7.9.4 AVL.CRUISE.V2015.0-车辆动力学仿真分析平台 AVL. ...
- leetcode笔记:Wiggle Sort
一. 题目描写叙述 Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nu ...