boost入门(一):boost简介

前言

发现自己做为C++,竟然没有用过boost。特地学习下如何使用boost,我作为初学者,会从入门指南开始,一点点深入了解boost。

本文采用的版本是boost 1.75.0

boost 介绍

boost 是一个跨平台的C++工具库,是的,没错!相当于一个大的工具集合。当然boost没有那么全面,比如界面库就没有。

首先到官网下载boost,我选择的是boost 1.75.0 Windows版本。可以阅读发行版本的文档,来查看boost包含有哪些工具,我就不一一列出来,可以去boost 1.75.0 documentation看下。

boost 直接引入hpp

boost是多个库的集合,有些库采用hpp头文件编写。我们如果要用这种库,直接引用头文件即可。

首先设置项目直接引入boost的头文件:

在这里插入图片描述

接下来就能使用使用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) << " ");
}

这个代码的功能是把输入的数字*3,然后再输出。

具体代码我们不用看,只要看到运行结果,说明我们成功调用了boost库中的Lambda模块。是不是很简单?

boost 构建

boost中有些库需要构建,那么就需要借助b2.exe程序了。我们可以把b2.exe理解成预编译器,它会告诉真正的编译器如何进行编译。

b2.exe 默认在目录下是没有的,需要运行tools\build 目录下的bootstrap.bat :

在这里插入图片描述

在这里插入图片描述

从图可以看出,运行bootstrap.bat,会编译出b2.exe

有了b2.exe,我们下一步就是安装了。安装格式为 b2 install --prefix = PREFIX ,其中PREFIX为要安装Boost.Build的目录。比如我要安装在F:\C++\boost_1_75_0\build,那么命令行:

b2 install --prefix=F:\C++\boost_1_75_0\build

最后一步,可选。将F:\C++\boost_1_75_0\build\bin添加到环境变量中,以便命令行在哪个目录都可以用b2

下面开始重头戏,编译boost。F:\C++\boost_1_75_0\builds代表编译过程中的中间文件。

在命令行中输入:

b2 --build-dir=F:\C++\boost_1_75_0\builds toolset=msvc --build-type=complete stage

编译过程有点慢,请耐心等待!编译的结果在F:\C++\boost_1_75_0\stage\lib目录下

编译完之后,我们在项目上添加附加库目录:

在这里插入图片描述

编译完之后,我们演示下与Boost二进制库的链接:

#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;
    }
}

PS:因为VS编译器可以自动链接到库,所以我们不需要手动添加依赖库

boost 构建的命名规则

我们可以找一个库 libboost_regex-vc142-mt-gd-x32-1_75.lib 进行分解:

lib

​ 前缀:除Windows外,每个boost库名称都以该字符串开头。在Windows上,只有静态库才会以lib开头

boost_regex

​ 库名称:所有boost库文件名都以 boost_ 开头

-vc142

​ 平台工具集,看图:

在这里插入图片描述

-mt

​ 线程:如果有这个标记就代表该库是在启用多线程支持的情况下构建的,没有的话就代表没有多线程支持

-gd

​ ABI(Application Binary Interface,ABI):对影响库与其他已编译代码互操作性的细节编码。简单来说编译模式:

关键字当使用这个库的时候Boost.Build 选项
s静态链接runtime-link=static
g优化后的调试版本,俗称release带调试信息版本runtime-debugging=on
y使用python的特殊调试版本python-debugging=on
d没有优化调试版本,俗称debug版本variant=debug
p使用STLPort标准库,而不是编译器随附的默认库stdlib=stlport

Boost.Build 选项是b2.exe运行的选项

x32

​ 指的是32位程序,有两种模式:x32和x64。官方文档这个地方没有更新,我编译出来的是x32,官网上写的x86。

-1_75

​ boost的版本号,代表我所使用的1.75.0,因为没有小版本号所以就省略了0

.lib

​ 扩展名:根据操作系统约定确定。Linux为.a和.so,Windows为.lib和.dll

补充

如果想特定的编译boost库,可以看b2 用户手册,手册写的很详细。

接下来,我会写关于Asio库。请看下一篇:《boost入门(二):Asio的简介》

有什么问题,我会及时回复。

  • 14
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
你可以使用Boost库来实现一个基于C++的Linux HTTP服务器。以下是一个简单的示例代码: ```cpp #include <iostream> #include <boost/asio.hpp> #include <boost/bind.hpp> class HttpServer { public: HttpServer(boost::asio::io_service& ioService, short port) : acceptor_(ioService, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)) { startAccept(); } private: void startAccept() { boost::asio::ip::tcp::socket socket(acceptor_.get_io_service()); acceptor_.async_accept(socket, boost::bind(&HttpServer::handleAccept, this, socket, boost::asio::placeholders::error)); } void handleAccept(boost::asio::ip::tcp::socket& socket, const boost::system::error_code& error) { if (!error) { std::cout << "Accepted connection from: " << socket.remote_endpoint().address().to_string() << std::endl; startAccept(); } } boost::asio::ip::tcp::acceptor acceptor_; }; int main() { boost::asio::io_service ioService; HttpServer server(ioService, 8080); ioService.run(); return 0; } ``` 这个简单的HTTP服务器使用Boost库中的`asio`模块来处理网络通信。它监听8080端口,并在有新连接时打印客户端的IP地址。你可以根据需要扩展这个示例,添加HTTP请求处理逻辑。 请注意,这只是一个基本的示例,实际的HTTP服务器可能需要更多的功能和复杂性。你可能需要处理HTTP请求、路由、静态文件服务、动态内容生成等。但是,这个示例应该可以帮助你入门并了解如何使用Boost库构建一个简单的Linux C++ HTTP服务器。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值