boost向来有准标准库之称,很多新特性例如智能指针等都是先在boost中实现,后来被吸收到标准库之中。而且boost实现了日志、算法、日期、地理、数学、线程协程等各种实用工具,所以如果要学习C++,boost是必须要学习的一个东西。
下面记录在Linux下编译安装boost1.58.0库的过程步骤,希望对大家有用。
一、编译平台
Linux版本:Ubuntu 16.04 LTS
Boost版本:1.58.0
二、下载boost安装包
https://sourceforge.net/projects/boost/files/boost/1.58.0/
三、编译boost
1、bootstrap
cd boost_1_58_0
#./bootstrap.sh
./bootstrap.sh --with-libraries=all --with-toolset=gcc
--with-libraries
指定编译哪些boost库
,all的话就是全部编译,只想编译部分库的话就把库的名称写上,之间用 , 逗分隔即可,可指定的库有以下几种:
Component configuration:
- atomic : building
- chrono : building
- container : building
- context : building
- coroutine : building
- date_time : building
- exception : building
- filesystem : building
- graph : building
- graph_parallel : building
- iostreams : building
- locale : building
- log : building
- math : building
- mpi : building
- program_options : building
- python : building
- random : building
- regex : building
- serialization : building
- signals : building
- system : building
- test : building
- thread : building
- timer : building
- wave : building
--with-toolset
指定编译时使用哪种编译器,Linux下使用gcc即可,如果系统中安裝了多个版本的gcc,在這里可以指定gcc的版本,比如--with-toolset=gcc-4.4
2、b2
#需要10几分钟
./b2
遇到的问题“...failed updating 31 targets...”,是因为将源码放在了虚拟机共享的文件下进行编译,这样的操作是不允许的,共享文件夹是虚拟机通过挂载的方式挂载在Windows上的。在windows的文件夹是支持NTFS格式的,它是不允许编译so文件时进行符号链接的。
以下是成功的截图:
四、安装
sudo ./b2 --prefix=/usr/local/boost_1_58_0 install
#会将boost的头文件和库安装到/usr/local/boost_1_58_0/
五、将boost库添加至环境变量
gedit /etc/environment
#向文件中增加以下路径
CPLUS_INCLUDE_PATH=/usr/local/boost_1_58_0/include
LIBRARY_PATH=/usr/local/boost_1_58_0/lib
六、更新库
如果安裝后想马上使用boost库进行编译,还需要执行一下这个命令:
sudo ldconfig