1)首先去官网下载boost源码安装包:http://www.boost.org/
选择下载对应的boost源码包。本次下载使用的是 boost_1_60_0.tar.gz
(2)解压文件:tar -zxvf boost_1_60_0.tar.gz
(3)进入源代码路径执行命令 ./bootstrap.sh
这一条命令完成boost默认配置,当然编译boost是需要gcc 和 g++的支持的。如果没有gcc 和 g++可以执行命令:
yum install gcc gcc-c++ 安装gcc g++
这一条命令默认的安装路径配置为/usr/local/路径下。及执行这条命令等同执行以下命令
./bootstrap.sh –prefix=/usr/local/
也就是默认的boost头文件安装到/usr/local/include/文件夹下。boost库文件会安装到/usr/local/lib/文件夹下。安装完成之后 你会在对应的文件夹下看到对应的文件。
(4)执行完上一条命令之后可以执行命令 ./b2 进行编译。(注意:编译需要耗费相当长的一段时间)
(5)然后执行下面安装命令
./b2 install 或者 ./bjam install
安装命令应该是管理员权限,因为需要到向系统中拷贝文件及库文件。
(6)将/usr/local/include下的boost文件夹及里面的内容全部拷贝到/usr/include/下。
将/usr/local/lib下的所有文件拷贝到/usr/lib下。
(7)测试test.cpp
- #include <boost/thread.hpp>
- #include <iostream>
- void task1() {
- // do stuff
- std::cout << "This is task1!" << std::endl;
- }
- void task2() {
- // do stuff
- std::cout << "This is task2!" << std::endl;
- }
- int main (int argc, char ** argv) {
- using namespace boost;
- thread thread_1 = thread(task1);
- thread thread_2 = thread(task2);
- // do other stuff
- thread_2.join();
- thread_1.join();
- return 0;
- }
编译指令: g++ test.cpp -o test -lboost_thread
3.设置环境变量
在/etc/profile.d新建可执行文件boost.sh,添加文件内容:
命令行执行:source /etc/profile.d/boost.sh
以后在编译程序时,只需要用:-I$BOOST_INCLUDE -L$BOOST_LIB 即可,还要使用-l指定了链接库。
然后, /etc/ld.so.conf 文件添加so库的环境变量 /home/boost-1.56.0/sdk/lib(主要关键问题)
修改完成后,通过ldconfig命令进行重启
(5).编译完成后,在/usr/local/include/boost目录中就有了新的boost头文件,在/usr/local/lib目录中就会有编译好的.so库文件和.a库文件。
(6).进入/etc/ld.so.conf.d/目录,创建boost.conf文件,并写入/usr/local/lib/然后保存退出。然后输入命令:ldconfig重新加载所有库。执行完成后可以输入:ldconfig -v | grep boost命令来查看最新编译好的库是否已经加载。如果没有加载则可能上面的几个步骤有缺失或者执行出错。
注意:做以上所有操作时,必须要root权限,否则会安装失败。
vi ~/.bash_profile
最后加入
export boost='
-lboost_date_time
-lboost_filesystem
-lboost_graph
-lboost_iostreams
-lboost_math_c99
-lboost_math_c99f
-lboost_math_c99l
-lboost_math_tr1
-lboost_math_tr1f
-lboost_math_tr1l
-lboost_prg_exec_monitor
-lboost_program_options
-lboost_python
-lboost_regex
-lboost_serialization
-lboost_signals
-lboost_system
-lboost_unit_test_framework
-lboost_wave
-lboost_wserialization'
以后编译就可以使用g++ xxx.cpp $boost即可。
在线教程: http://boost.ez2learn.com/libs/libraries.htm
document: http://www.boost.org/doc/libs/1_61_0/
- 算法
- 并行计算
- 容器
- array - STL的数组容器
- Boost Graph Library (BGL) - 通用的图容器,组件和算法
- multi-array - N维数组
- multi-index containers - 多索引容器
- pointer containers - 指针容器
- property map - 属性Map
- variant - 安全的,基于泛型的,支持访问者模式的联合
- fusion - 基于tuple的容器和算法集合
- 正当性与测试
- concept check - 检查模板参数是否满足模板的要求
- static assert - 编译期的断言检查
- Boost Test Library - C++ 单元测试框架
- 数据结构
- dynamic_bitset -
std::bitset-
的动态转型
- dynamic_bitset -
- 仿函数与高级函数(含无名関数)
- 泛型
- 图
- I/O
- 语言之间的支持(Python用)
- 迭代器
- 数学和计算
- 内存(memory)
- pool - 内存池,boost提供4种内存池模型供使用:pool、object_pool、singleton_pool、pool_allocator/fast_pool_allocator
- smart_ptr - boost的smart_ptr中提供了4种智能指针,作为std::auto_ptr的补充
- scoped_ptr - 具作用域指针,与std::auto_ptr类似,但不能转让所有权,用于确保离开作用域能够正确地删除动态分配的对象
- scoped_array - 配合scoped_ptr使用
- shared_ptr -
- shared_array - 配合shared_ptr使用
- weak_ptr - shared_ptr 的观察者,避免shared_ptr循环引用,是一种辅助指针
- intrusive_ptr - 比 shared_ptr 更好的智能指针
- utility - 以下是utility类型的定义。
- base from member idiom -
- checked delete - 保证在摧毁一个对象时,必须对该对象的类型有充份了解
- next and prior functions -
- noncopyable - 把copy constructor和assign operaotr 宣告为private,不加以实现
- addressof - 用于获得变量的地址
- result_of - 指涉函数回返类型
- 其他
- 语法分析器
- 预处理元编程
- 字符串与文字处理(正则表达式等)
- lexical_cast - lexical_cast 类别模板
- format - 文字格式化,类似printf
- iostreams - 新式iostream的补强
- regex - 正规表示法(Regular expression)
- Spirit - 根据EBNF规则对文件进行分析
- string algorithms - 文字列算法
- tokenizer - 把字符串序列分解成一系列标记(tokens)
- wave -
- 模板元编程(Template Metaprogramming)
- mpl - 模板元编程框架
- static assert - 静态断言
- type traits - 类型的基本属性的模板
字符串和文本处理库
容器库
迭代器库
算法库
函数对象和高阶编程库
泛型编程库
模板元编程
预处理元编程库
并发编程库
数学和数字库
排错和测试库
数据结构库
图像处理库
输入输出库
跨语言混合编程库
内存管理库
解析库
编程接口库
综合类库
编译器问题的变通方案库
Boost的部分内容已经进入C++ 11 标准,那么直接在网上查C++的文档资料就可以了,比如http://www.cplusplus.com或者http://www.cppreference.com。
对于不是标准的部分,直接看官方文档就可以了。
boost内容比较多,除了之前有人说过的一些已经成为C++标准的东西以外还有很多其他的组件,像graph啊math啊GIL这样专业性很强的,也有一些很好用的小组件比如说时间日期,filesystem 这样的,可以根据自己需要有选择的学习
英文水平好的话建议直接看文档,觉得文档没讲清楚的可以谷歌找点例子(我在学GIL的时候发现boost官方少了文件(关于图像缩放的),而GIL是当初Adobe捐出来的,其官方的相关页面早已挂,谷歌了半天才在一个svn上找到……)
书的话国内的倒是有罗剑锋写的《Boost程序库完全开发指南》和《Boost程序库探秘》,前者是一个大体的介绍,后者是针对一些诸如模板元编程等高级特性做了深入的探讨。两本我都有,感觉写的不错,目前正在学习。
国外的只看过《Boost C++ Application Development Cookbook》国内有翻译的,也只是对boost做了一个大概的介绍,感觉一般不是很推荐。
学习C++有没有必要学习boost库?
2.【boost能不能用】在使用C++开发项目的公司里boost库普及情况如何?公司一般允许不允许使用boost库?开源项目用boost的多不多?
3.【boost好不好用】使用boost库的程序是否易于调试?boost库效率如何?在多线程等环境下使用是否安全?
4.【boost好不好学】boost库学习难度如何?应该先深入学习C++再学boost还是掌握C++基本语法就学boost?应该学习boost的全部还是一些重要的部分?
5.boost库的发展前景如何?
2.boost库之前的公司中项目用了boost很多东西,陈硕的muduo库中也用了boost的东西,性能问题不需要担心,而且写代码会舒服很多
3.boost性能不需要担心,调试不好调,因为根本看不懂,特别是bind function这块,基本你要看错误直接一眼就看出来问题不太可能,需要熟练使用后根据经验才知道是哪里有问题.多线程使用问题和你代码设计有关系和boost没关系
4.boost难度不算大,看源码会很费劲,只要会用即可,基本上用的多的就那么几个
5.boost 在VS 2013(/2012),gcc 4.8之前可以说离开了boost会很不爽,但是之后boost里面用的就相对少了,因为很多糖都是从boost高过去的,不过boost的asio还是可以使用下,好用,舒服,性能足够用.
boost 很有必要学习。boost 有很多好用的组件,可以作为基本积木块来构建自己的项目。这样随手就用,不用自己花费很多时间精力去土法练钢,还只练出个铁渣。比如 noncopyable、字符串算法、format、pool、xpressive、flat_map 等等都是很实用的。function,bind,lambda, shared_ptr,auto 等已经进入 C++ 11,用 boost 已经没有必要了。
boost 的性能不需要担心。
boost 唯一的问题包含太多的东西(这个是它优点也是缺点),太庞大了,直接包含到工程中不方便。
实际应用中,我都是将 boost 库下载后放在本机的某个地方,之后建立一个 /boost 符号链接指向实际的路径。就这样在本机中配置一次,全部工程都可以用 boost 库了。项目组的成员也就做一次,也不算麻烦。boost 库的具体普及情况我不清楚,至少我之前的公司是可以使用的。
boost 很多库都可以直接包含头文件就可以使用。而一些库需要编译,但分平台编译比较麻烦,建议建立一个 boost_pre_build.cpp 文件,将一些需要编译的 boost cpp文件直接包含进去。比如
// boost_pre_build.cpp
#include <libs/system/src/error_code.cpp>
包含太多的 cpp 文件,符号可以会冲突,就多建一个 boost_pre_build_1.cpp,将一些 boost cpp 分开。这样做虽然粗暴,但比自己去折腾编译要省很多时间。比如需要在 iOS 项目中使用。
很多 boost 库采用 STL 的风格,需要 STL 的基础。建议先用好 STL 再去看 boost。
boost 太庞杂。boost 更准确的说,并不是一个库,而是一个库集合。不用每个都去看。应该先快速翻阅一些简介,只需要了解一下有什么库,每个库大概是做什么东西的。之后碰到问题再细看具体的库用法。应该直接使用,千万千万不要去分析它的源码,那个是无底洞。
我用boost主要有两个用途:
1. 真的需要,比如bimap这种奇怪的数据结构
2. 试图去理解 stl。boost里面的代码可比自带的stl清晰多了,我精简了unique_ptr的代码,现在平时记不住它的接口功能,就翻翻我的精简版实现,毕竟对于短实现show me the codes远远比talk more要好用。
1、有用,STL还是很有限,你光看boost的组件列表也知道比STL多太多内容了。我建议你问问题之前还是得了解一下两者到底能做什么。
2、基本能用,能不能用完全看项目需求和有关负责人决策。例如服务器程序可能会采用,嵌入式设备就会拒绝。
3、不好说。不算难调试,不过也不算好调试。效率倒是可以,不过要是用的组件多了,再加上相互依赖,boost本身的空间占用都会是个问题。安不安全请阅读接口文档,会告诉你是不是线程安全的。
4、看你想学到哪,内容很多,如果只是拿来用用不在乎里面的设计,那倒容易。请先学好C++。学多少还是看需求。
5、还行,基本是C++新特性的试验场,以前发明的很多东西都被纳入新C++标准(C++11,C++14)
华山论剑 最悲哀的是什么 是不会爬山啊 java的下好的库 还没听说谁不会编译的
win的c++程序员下个代码发现是linux平台的 顿时泪流满面 各种臣妾做不到啊
其实 即使是下载个别的win程序员写的代码 也不见得编译的过去啊
boost啊 不用担心编译问题 不用担心跨平台问题 也不用担心不够强大的问题
c++11的一些新特性就学的boost C++14的新特性也会是
轻松加愉快的方式敲代码 干嘛要跟自己过不去呢