一、Linux下编译安装boost
最近在在Linux下配置Qt环境,同时项目需要用到Boost库,网上关于Linux下编译Boost库和Linux系统的Qt Creator中使用Boost库这二者的教程很多,但是没有一篇贯穿全部的教程,有鉴于此,如下是全部步骤:
1、下载Boost库,版本自选,建议最新版本
地址:http://www.boost.org/
2、Linux下编译Boost库,解压下载好的Boost库;
打开终端,cd 到Boost库解压目录,如我的为:/home/holy/boost_1_58_0
执行命令 sudo ./bootstrap.sh;(这里生成Boost专用编译工具)或
sudo ./bootstrap.sh –with-libraries=all –with-toolset=gcc
库名 | 说明 |
---|---|
atomic | |
chrono | |
context | |
coroutine | |
date_time | |
exception | |
filesystem | |
graph | 图组件和算法 |
graph_parallel | |
iostreams | |
locale | |
log | |
math | |
mpi | 用模板实现的元编程框架 |
program_options | |
python | 把C++类和函数映射到Python之中 |
random | |
regex | 正则表达式库 |
serialization | |
signals | |
system | |
test | |
thread | 可移植的C++多线程库 |
timer | |
wave |
--with-toolset指定编译时使用哪种编译器,Linux下使用gcc即可,如果系统中安装了多个版本的gcc,在这里可以指定gcc的版本,比如--with-toolset=gcc-4.4。
执行完成后会在boost根目录生成 b2.exe 、bjam.exe 、project-config.jam 、bootstrap.log四个文件。其中b2.exe 、bjam.exe 这两个exe作用是一样的,bjam.exe 是老版本,b2是bjam的升级版本。
执行命令 sudo ./b2 install
bjam命令参数分析
我们以文章【1】中的命令来分析一下各个参数的作用。
(1)stage/install:
stage表示只生成库(dll和lib),install还会生成包含头文件的include目录。本人推荐使用stage,因为install生成的这个include目录实际就是boost安装包解压缩后的boost目录,所以可以直接使用,而且不同的IDE都可以使用同一套头文件,这样既节省编译时间,也节省硬盘空间。
(2)toolset:
指定编译器,可选的如borland、gcc、msvc(VC6)、msvc-9.0(VS2008)等。
(3)without/with:
选择不编译/编译哪些库。因为python、mpi等库我都用不着,所以排除之。还有wave、graph、math、regex、test、program_options、serialization、signals这几个库编出的静态lib都非常大,所以不需要的也可以without掉。这可以根据各人需要进行选择,默认是全部编译。但是需要注意,如果选择编译python的话,是需要python语言支持的,应该到python官方主页http://www.python.org/下载安装。
查看boost包含库的命令是./b2 --show-libraries。
(4)stagedir/prefix:
stage时使用stagedir,install时使用prefix,表示编译生成文件的路径。推荐给不同的IDE指定不同的目录,如VS2008对应的是E:\SDK\boost\bin\vc9,VC6对应的是E:\SDK\boost\bin\vc6,否则都生成到一个目录下面,难以管理。如果使用了install参数,那么还将生成头文件目录,vc9对应的就是E:\SDK\boost\bin\vc9\include\boost-1_46\boost,vc6类似(光这路径都这样累赘,还是使用stage好)。
(5)build-dir:
编译生成的中间文件的路径。这个本人这里没用到,默认就在根目录(E:\SDK\boost)下,目录名为bin.v2,等编译完成后可将这个目录全部删除(没用了),所以不需要去设置。
(6)link:
生成动态链接库/静态链接库。生成动态链接库需使用shared方式,生成静态链接库需使用static方式。一般boost库可能都是以static方式编译,因为最终发布程序带着boost的dll感觉会比较累赘。
(7)runtime-link:
动态/静态链接C/C++运行时库。同样有shared和static两种方式,这样runtime-link和link一共可以产生4种组合方式,各人可以根据自己的需要选择编译。
(8)threading:
单/多线程编译。一般都写多线程程序,当然要指定multi方式了;如果需要编写单线程程序,那么还需要编译单线程库,可以使用single方式。
(9)debug/release:
编译debug/release版本。一般都是程序的debug版本对应库的debug版本,所以两个都编译。
3、Qt Creator中使用Boost库(这里以thread库的使用为例)
新建控制台应用主程序中代码如下:
#include <QtCore/QCoreApplication>
#include <boost/thread.hpp>
#include <iostream>
using namespace std;void hello()
{ cout<<"qt"<<endl;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
boost::thread My_thread(&hello);
My_thread.join();
return a.exec();
}
.pro文件中添加Boost头文件路径和库文件路径,如下:
LIBS +=/home/XXX/boost_1_52_0/stage/lib/libboost_thread.a
LIBS +=/home/XXX/boost_1_52_0/stage/lib/libboost_system.a
注意这里,在Qt中使用Boost库一定要加:(具体原因看:http://blog.csdn.net/mangobar/article/details/52044778)
DEFINES +=BOOST_USE_LIB
即可编译运行
二、Linux-arm下编译boost 1.58.0
下载boost 1.58.0,解压缩
运行booststrap.sh,运行后,生产project-config.jam和bjam
修改project-config.jam文件,如下
# Boost.Build Configuration
# Automatically generated by bootstrap.sh
import option ;
import feature ;
# Compiler configuration. This definition will be used unless
# you already have defined some toolsets in your user-config.jam
# file.
if ! gcc in [ feature.values <toolset> ]
{
using gcc : : /home/xxxxxx/arm/3.4.1/bin/arm-linux-gcc ;
}
project : default-build <toolset>gcc ;
# Python configuration
using python : 2.7 : /usr ;
# List of --with-<library> and --without-<library>
# options. If left empty, all libraries will be built.
# Options specified on the command line completely
# override this variable.
libraries = ;
# These settings are equivivalent to corresponding command-line
# options.
option.set prefix : /home/xxxxxx/arm/3.4.1 ;
option.set exec-prefix : /home/xxxxxx/arm/3.4.1/bin ;
option.set libdir : /home/xxxxxx/arm/3.4.1/lib ;
option.set includedir : /home/xxxxxx/arm/3.4.1/include ;
/home/xxxxxx/arm/3.4.1是arm-linux-gcc编译器所在的位置,红色部分是需要修改的最后运行bjam,生产boost for arm-linux库