boost裁剪和编译

winddows:

bjam --show-libraries 查询所有的模块

1、运行bootstrap.bat编译bjam。

2、bjam.exe ./tools/bcp

3、在bin.v2/tools/bcp/目录下可以找到 bcp.exe。这就是我们所需要的程序了。

假设我们允许程序员用A、B、C、D这样四个模块,那么可以这样:

bcp --boost:<boost-root-directory> A B C D <output-directory>

这里A、B、C、D可以是:

Boost的头文件名。如: boost/shared_ptr.hpp

Boost的库名。如:regex

Boost的头文件标题:boost/shared_ptr 或者 shared_ptr

如果是在boost根目录下,那指定boost目录的参数也可以省去。

linux:

1、 执行 ./bootstrap.sh生成bjam
2、 生成bcp程序 ./bjam tools/bcp/
3、 查看是否生成了bcp: cd dist/bin
4、 回到boost根目录下开始提取。
5、 在根目录下创建一个目录,用于存放提取的文件 mkdir boostlite
6、 ./dist/bin/bcp XXX boostlite/

windows下编译BOOST

  1. 开始菜单启动Visual Studio 2015的vs2015 开发人员命令行提示,然后转到boost根文件夹,运行bootstrap.bat生成b2.exe。
  2. 运行命令:b2 stage --toolset=msvc --without-coroutine --without-graph --without-graph_parallel --without-math --without-mpi --without-python --without-serialization --without-wave --without-test link=static runtime-link=static threading=multi address-model=64 debug release

(1)可以设置为仅用于当前project:

选中当前project->Properties->Configuration Properties->C/C++->General: Additional Include Directories: 设置 

选中当前project->Properties->Configuration Properties->Linker->General: Additional LibraryDirectories: 设置

(2)可设置为仅用于当前Solution:

选中当前project->Properties->Configuration Properties->VC++ Directories:

Include Directories: 设置 LibraryDirectories: 设置 

(3)可设置为OS当前用户下的VC++环境(当前用户下VC++所创建的所有Solution)

在某个已打开的工程下,切换到Property Manager 选项卡,然后然后展开当前工程的properties配置,打开Microsoft.Cpp.Win32.User

选择Common Properties->VC++ Directories:

Include Directories: 设置  LibraryDirectories: 设置

(4)可设置为OS所有用户下的VC++环境

可以编辑 Microsoft.Cpp.Default.props 、Microsoft.Cpp.props 。这里就不介绍了。

Linux下编译:

./bootstrap.sh 

./b2 --show-libraries

./b2 stage --toolset=gcc --without-graph --without-graph_parallel --without-math --without-mpi --without-python --without-serialization --without-wave --without-test link=static runtime-link=static threading=multi address-model=64 architecture=x86 variant=debug,release

./b2 install --prefix=/usr/local --toolset=gcc --without-graph --without-graph_parallel --without-math --without-mpi --without-python --without-serialization --without-wave --without-test link=static runtime-link=static threading=multi address-model=64 architecture=x86

echo "/usr/local/lib/" >> /etc/ld.so.conf
ldconfig

g++ -lz -lpthread test.c -lboost_filesystem -lboost_thread



<think>嗯,用户现在问的是PocoBoost哪个好。我需要先回忆一下这两个库的特点用途。Poco是一个强调跨平台、模块化设计的C++库,主要用于网络应用嵌入式系统。Boost则是一个广泛使用的C++准标准库,涵盖了大量通用组件,比如智能指针、容器、算法等。 用户可能是在选择项目使用的库,所以需要对比它们的优缺点。用户可能没有明确说明项目类型,但可能涉及网络编程、系统开发或需要特定功能模块。我需要分析两者的适用场景、功能覆盖、性能、学习曲线社区支持。 首先,Poco的优势在于其网络HTTP相关的模块,比如TCPServer、HTTPServer等,适合需要快速开发网络服务的场景。而Boost则提供了更多的基础设施,比如Boost.Asio用于异步IO,Boost.Spirit用于解析,还有大量算法数据结构。如果项目需要广泛的通用功能,Boost可能更合适。 其次,性能方面,两者都是高效的,但具体取决于使用场景。例如,Boost.AsioPoco的网络模块在性能上可能各有千秋,但需要具体测试。对于嵌入式系统,Poco的轻量级可能更有优势。 学习曲线方面,Poco的API设计更偏向实用主义,可能更容易上手,尤其是针对特定功能。Boost的模板元编程复杂的用法可能需要更深入的学习,特别是像Boost.MPL或Boost.Fusion这样的库。 社区生态方面,Boost作为准标准库,社区庞大,文档丰富,且有大量第三方库支持。而Poco的社区相对较小,但足够稳定,适合企业级应用。 用户可能还关心维护更新情况。Boost持续更新,跟随C++标准发展,而Poco虽然稳定,但更新频率可能不如Boost高。 需要指出的是,两者并不完全互斥,可以结合使用。比如用Boost处理底层算法,用Poco处理网络通信。用户可能需要根据具体需求选择,或者两者都采用。</think>$$--------------------------- 核心对比维度 ---------------------------$$ | **对比项** | **POCO** | **Boost** | |------------------|-----------------------------------|---------------------------------| | **定位** | 应用层网络开发框架 | C++标准库扩展 | | **典型应用** | HTTP/TCP服务器、嵌入式系统 | 通用编程工具库 | | **代码风格** | 面向对象/业务友好 | 模板元编程/泛型设计 | | **编译体积** | 模块化裁剪(最小约5MB) | 全量较大(通常50MB+) | | **网络库性能** | 同步模型简单高效 | Asio异步模型更强大 | $$--------------------------- 关键场景选择建议 ---------------------------$$ 1. **优先选POCO**: - 需要快速构建企业级网络服务(如REST API) - 开发资源受限的嵌入式系统 - 要求开箱即用的HTTP/WebSocket支持 - 示例:工业物联网网关开发 2. **优先选Boost**: - 需要底层算法优化(如图算法) - 使用C++新特性(如Boost.Hana元编程) - 跨平台线程/文件系统操作(C++17前) - 示例:高频交易系统核心引擎 $$--------------------------- 混合使用案例 ---------------------------$$ ```cpp // 使用Boost处理复杂计算,POCO处理网络通信 #include <boost/math/distributions/normal.hpp> #include <Poco/Net/HTTPClientSession.h> void hybridDemo() { // Boost数学计算 boost::math::normal_distribution<> norm(0, 1); double p = boost::math::cdf(norm, 1.96); // 计算结果 // POCO发送结果 Poco::Net::HTTPClientSession session("api.example.com"); Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_POST, "/data"); request.setContent(std::to_string(p)); session.sendRequest(request); } ``` $$--------------------------- 学习成本对比 ---------------------------$$ - POCO学习曲线:$\text{掌握基础约20小时}$ - Boost学习曲线:$\text{精通需要100+小时}$ - 交叉学习建议:先掌握POCO网络编程,再深入Boost核心组件 $$--------------------------- 2023年GitHub活跃度 ---------------------------$$ | 指标 | POCO | Boost | |------------|------------|------------| | Stars | 6.8k | 6.1k | | Contributors | 150+ | 500+ | | 最后更新 | 2023-08 | 2023-09 | 建议根据具体项目需求选择,两者并非互斥关系。对于网络密集型应用可优先使用POCO,需要底层基础设施时结合Boost共同使用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值