1. 下载编译
下载 boost-1.53.0, 解压至E:/boost
进入boost目录,运行booststrap.bat,会在当前目录生成 b2.exe, bjam.exe 两个可执行文件,编译boost需要执行bjam命令
2. 编译boost
显示所有库名称
bjam --show-libraries
编译命令
rem 编译静态库 bjam stage --without-python --toolset=msvc-10.0 --build-type=complete --stagedir="E:\boost\bin" link=static runtime-link=static threading=multi debug release rem 编译动态库 bjam stage --without-python --toolset=msvc-10.0 --build-type=complete --stagedir="E:\boost\bin" link=shared runtime-link=shared threading=multi debug release
参数:
stagedir 编译后生成文件存放路径
link: 生成静态/动态库,一般生成静态库
threading: 指定multi,多线程编译
等待半个多小时后,编译完成,会在E:/boost目录生成bin.v2(中间目录,可删除),和bin目录. bin/lib目录下存放的是debug/release版本的静态库
3. 测试
vs10下新建win32控制台项目, 设置附加库目录: E:/boost 附加库目录: E:/boost/bin/lib
#include <iostream> #include <string> // 此宏抑制boost自动链接,否则会自动链接boost_regex_xxx.lib这样名称的库 #define BOOST_ALL_NO_LIB #include <boost/regex.hpp> #pragma comment(lib,"libboost_regex-vc100-mt-sgd-1_53.lib") /** * 测试Boost正则表达式库 * */ int main(int argc,char **argv) { 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; } } return 0; }
编译出现链接错误:
1>libboost_regex-vc100-mt-sgd-1_53.lib(instances.obj) : error LNK2005: "public: __thiscall std::_Container_base12::_Container_base12(void)" (??0_Container_base12@std@@QAE@XZ) 已经在 msvcprtd.lib(MSVCP100D.dll) 中定义
1>libboost_regex-vc100-mt-sgd-1_53.lib(instances.obj) : error LNK2005: "public: __thiscall std::_Container_base12::~_Container_base12(void)" (??1_Container_base12@std@@QAE@XZ) 已经在 msvcprtd.lib(MSVCP100D.dll) 中定义
1>libboost_regex-vc100-mt-sgd-1_53.lib(regex_traits_defaults.obj) : error LNK2005: "public: void __thiscall std::_Container_base12::_Orphan_all(void)" (?_Orphan_all@_Container_base12@std@@QAEXXZ) 已经在 msvcprtd.lib(MSVCP100D.dll) 中定义
1>LINK : warning LNK4098: 默认库“LIBCMTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
1>F:\vs workspace\boost\Debug\boost.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
解决方法: msvcprtd.lib表示要用静态库,所以在生成要链接到这个项目的lib时,设置 工程/属性/C/C++/代码生成/运行库 /MTd,重新编译,一切OK
4. 其它平台的编译
Linux平台下编译与上面类似,而且更简单,三条命令搞定:
./boostrap.sh # 产生b2,bjam可执行文件
sudo ./b2
sudo ./b2 install # 安装,头文件和库默认安装在 /usr/local 下
5. asio
相对于老牌的通信框架ACE, boost asio显示更加轻量级,与libevent一样,底层也封装了高效的网络模型, 内部通过对线程队列的实现,也使得该框架性能也是非常优良. boost 内部实现产生了大量的宏和模板,编程感觉有点不习惯,下面看看 asio 异步TCP服务器的实现源码:
// TCP 服务器 class TcpServer { public: TcpServer(boost::asio::io_service &io_service) :io_service(io_service) ,acceptor_(io_service,tcp::endpoint(tcp::v4(),1234)) // 监听1234号端口 { // 等待连接 start(); } void start() { boost::shared_ptr<tcp::socket> psocket(new tcp::socket(io_service)); // 注册连接事件回调函数 acceptor_.async_accept(*psocket, boost::bind(&TcpServer::handle_accept, this, psocket, boost::asio::placeholders::error) ); } void handle_accept(boost::shared_ptr<tcp::socket> psocket,const boost::system::error_code &error) { if(error) return; // 显示远程ip std::cout<<psocket->remote_endpoint().address()<<"---"<<psocket->remote_endpoint().port()<<std::endl; // 继续等待连接 start(); // 异步发送消息,async_ 开头的都是异步调用,不管回调是否结束,立即返回 // 通过bind绑定参数,这个 async_write + bind 的调用形式比较奇怪 // bind 指定回调函数 handle_write(),它需要两个参数 error,bytes_transferred message = "hello client"; boost::asio::async_write(*psocket,boost::asio::buffer(message), boost::bind(&TcpServer::handle_write,this,boost::asio::placeholders::error,boost::asio::placeholders::bytes_transferred) ); } void handle_write(const boost::system::error_code ec,size_t) { if(ec) printf("Fail to send!\n"); } private: boost::asio::io_service &io_service; tcp::acceptor acceptor_; std::string message; }; int main() { boost::asio::io_service io_service; TcpServer server(io_service); io_service.run(); // 循环分发回调函数 return 0; }
相关推荐
Boost库的目标是要被广泛使用,并可用于各种各样的应用。Boost许可证既鼓励商业用途,也鼓励非商业用途。 我们的目标是建立"既有的实践"和提供参考实现,使得Boost库可以适合最后的标准化。已经有十个Boost库被纳入...
Boost 使用经验总结 Boost 库是一个功能强大且广泛使用的 C++ 库,它提供了许多有用的功能和算法,帮助开发者更快速和高效地完成项目。但是,在使用 Boost 库时,往往会遇到一些编译错误和问题,以下是个人在使用 ...
CatBoost使用的一个小例子,包含代码和数据。 代码解释的博文为:https://blog.csdn.net/u013172930/article/details/143723670
C++ BOOST 正则表达式使用教程 正则表达式是一种用来描述一定数量文本的模式,用于匹配和处理大量规则的文本格式。 Regex 代表 Regular Express。C++ 中使用 Boost 库的 regex 类来实现正则表达式。 正则表达式的...
通过使用Boost库,开发者可以编写出更健壮、更高效的代码,同时还能享受到现代C++编程的便利。由于Boost库的广泛采用,许多组件已被纳入C++标准库,这进一步证明了其价值和影响力。在实际项目中,熟练掌握Boost库的...
AWR1443boost 用户指南笔记 1 AWR1443boost 是一款用于评估 AWR1443 单芯片毫米波传感器的评估板。该板载天线、基于 XDS110 的 JTAG、用于 FFT 和 CFAR 的硬件加速器等特性,旨在帮助开发者快速开始开发毫米波雷达...
最后一个(无奈的)原因就是C++编译器的限制,许多编译器尚不支持C++标准提出的模板的分离编译模式,而Boost使用了大量的模板。Boost中90%的库不需要编译,但像data_time、regex、test、thread等库必须编译成静态库...
http协议是互联网上应用最为广泛的一种网络协议,他在接口中扮演着重要的角色,Post/Get请求,想必大家都有所耳闻,我们一起利用Boost::Asio库来实现Post/Get请求的发送。 VS2013 文章地址:...
这里的`--with-python`参数告诉Boost使用哪个Python版本。确保这个路径指向了Python 3.5的解释器。 3. **配置Caffe**:在Caffe源代码目录中,找到`Makefile.config`文件。在这个文件中,你需要修改Python的相关路径...
在boost中有自带的日志库供开发人员使用但效率不是最高的: 加入头文件#include 即可引入日志库 boost中的log库有以下六种级别: BOOST_LOG_TRIVIAL(trace) << A trace severity message; BOOST_LOG_TRIVIAL...
3. **示例代码**: 使用Boost库的一个简单例子,如使用`boost::thread`创建线程: ```cpp #include <boost/thread/thread.hpp> void hello() { std::cout , World from a thread!" ; } int main() { boost::...
本压缩包提供的"boost_1_68_0"版本,是Boost库的一个稳定版本,已经预先在CentOS7环境下编译完成,用户可以直接引入使用,从而节省了编译时间。 首先,了解Boost库的基本构成是非常必要的。Boost库包含了许多独立的...
最近开发中用到大量BOOST库的东西,现在把我开发中总结的boost使用方法分享一下,里面包括智能指针、boost定时器、boostthread和io_service等的用法和说明,还有一本Beyond the C++ Standard Library: An ...
### Boost正则库使用说明详解 #### 一、概述与配置 Boost正则库(Boost.Regex)是Boost库中的一个重要组成部分,它提供了一套强大的正则表达式处理功能。该库支持多种正则表达式的语法,包括Perl风格、POSIX扩展...
本篇文章将详细讲解如何在VC2010 MFC Unicode环境下简单使用Boost.Log。 Boost.Log提供了一个灵活、高效且功能丰富的日志系统,适用于各种规模和复杂度的项目。在Windows环境下,如VC2010 MFC Unicode,我们可以...
本文主要讨论如何在Windows环境下安装和编译Boost库,特别是针对Boost 1.35.0版本,以及如何在Visual Studio 2005 Pro + SP1中配置和使用Boost。 首先,安装Boost 1.35.0涉及到的主要步骤包括下载源代码、编译bjam...
在本文中,我们将详细介绍如何使用 Visual Studio 2008 编译 Boost 1.38 版本。 1. **下载 Boost** 首先,你需要访问 Boost 的官方网站(http://www.boost.org)下载 Boost 1.38.0 的源代码包,通常为 zip 格式。...
在Android NDK环境下使用Boost,可以利用这些强大的库来增强应用程序的功能。 **1. 安装和配置NDK** 首先,你需要下载并安装Android NDK。Android Studio集成了NDK管理,可以在项目设置中选择合适的NDK版本。在...