boost编译

转至:Boost在Linux和windows下的编译 32位 64位

安装编译流程

  • 运行命令:yum install gcc gcc-c++ bzip2 bzip2-devel bzip2-libs Python-devel -y 预先安装这些库,因为下面编译boost时会需要,若已安装,安装时会自动跳过,无需担心
  • 定位到/home目录,运行命令:wget https://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.tar.gz/download 从上面的boost1.55下载地址下载压缩包
    Linux环境下请下载tar后缀的文件,得到压缩包boost_1_55_0.tar.gz,笔者这里是下载后的路径为:/home/boost_1_55_0.tar.gz
  • 运行命令:tar -zxvf boost_1_55_0.tar.gz 解压到当前目录
  • 运行命令:cd boost_1_55_0 进入刚才的解压出来的目录
  • 运行命令:./bootstrap.sh 产生后面编译所必需的bjam
  • bjam是专门为boost库设计的编译工具,b2 、bjam 这两个可执行程序的作用是一样的,bjam 是老版本,b2是bjam的升级版本
  • 运行命令:./b2 –show-libraries 可以显示所有需要编译的库的名字
  • 运行命令:./b2 stage –toolset=gcc –stagedir=”\home\boost_1_55_0\gcc” architecture=x86 address-model=64 link=shared runtime-link=shared threading=multi –with-system –with-thread –with-date_time
  • 稍等十几分钟,即可在目录/home/boost_1_55_0/gcc下看到编译出来的库,如下图所示(注意:上面只编译了指定的三个库,system,thread, data_time,若想编译所有库,去掉后面的–with-选项即可)

b2/bjam参数说明:

  • stage/install:
    stage表示只生成库(dll和lib),install还会生成包含头文件的include目录。推荐使用stage,因为install生成的这个include目录实际就是boost安装包解压缩后的boost目录(H:\boost\boost_1_55_0\boost,只比include目录多几个非hpp文件,都很小),所以可以直接使用,而且不同的IDE都可以使用同一套头文件,这样既节省编译时间,也节省硬盘空间

  • toolset:
    表示编译器工具,默认自动检测,安装了多个编译器的时候可以使用此属性。可选的如borland、gcc、msvc(VC6)、msvc-12.0(VS2013)、msvc-14.0(VS2015)等,我安装的是VS2008,所以是msvc-9.0(如果你是VS2005,可以使用msvc-8.0 VS2010是msvc-10.0)

  • stagedir/prefix:
    stage时使用stagedir,install时使用prefix,表示编译生成文件的路径。推荐给不同的IDE指定不同的目录,例如这里是VS2008对应的是 H:\boost\boost_1_55_0\vc90
    如果使用了install参数,那么还将生成头文件目录,vc90 对应的就是 H:\boost\boost_1_55_\boost\bin\vc90\include\boost_1_55_0\boost

  • architecture
    表示架构,也就是你的CPU架构,所以是x86

  • address-model
    地址长度,32表示编译32位的库文件,64表示编译64位的库文件

  • link
    生成动态链接库还是静态链接库。生成动态链接库需使用shared方式,生成静态链接库需使用static方式。一般boost库可能都是以static方式编译,因为最终发布程序带着boost的dll感觉会比较累赘

  • runtime-link
    动态还是静态链接C/C++运行时库。同样有shared和static两种方式,这样runtime-link和link一共可以产生4种组合方式,各人可以根据自己的需要选择编译
    GCC下,在生成动态库(–link=shared)时,就不允许进行静态链接到C运行库(或C++标准库)

  • threading
    单线程还是多线程编译。一般都写多线程程序,当然要指定multi方式了;如果需要编写单线程程序,那么还需要编译单线程库,可以使用single方式

  • debug/release:
    编译debug/release版本。一般都是程序的debug版本对应库的debug版本,所以两个都编译

  • without/with:
    选择不编译/编译哪些库。这里我们指定要编译哪些库,就使用了witth,注意写法:–with-thread –with-date_time,同样,如果不想编译哪些库,可以类似写法–without-thread

设置环境变量

  • 如果是默认安装,则不需要设置环境变量
  • 如果是指定安装想要使用b2,以及boost库则需要配置环境变量;
配置1
// 可以在/etc/profile 或者在 ~/.bashrc中添加,之后运行 source /etc/profile 或者 source ~/.bashrc
export CPLUS_INCLUDE_PATH=/usr/boost/include:$CPLUS_INCLUDE_PATH

export LIBRARY_PATH=/usr/boost/lib:$LIBRARY_PATH

export BOOST_ROOT="/b2所在的目录"

export LD_LIBRARY_PATH=/usr/boost/lib:$LD_LIBRARY_PATH
配置2
// 可以在/etc/profile 或者在 ~/.bashrc中添加,之后运行 source /etc/profile 或者 source ~/.bashrc
export CPLUS_INCLUDE_PATH=/usr/boost/include:$CPLUS_INCLUDE_PATH

export LIBRARY_PATH=/usr/boost/lib:$LIBRARY_PATH

export BOOST_ROOT="/b2所在的目录"

//动态链接库
将在/etc/ld.so.conf 添加/usr/boost/lib;之后运行 ldconfig

配置完后,则可以是使用 b2 或者 g++(g++不需要包含手动包含头文件如:-I$BOOST_INCLUDE)

编译:

g++ -o text2 text2.cpp  -lboost_system -lboost_thread -lpthread
编译错误:

需要加上-lboost_system不然会报错;
错误信息如下:

对‘boost::system::system_category()’未定义的引用 collect2: error: ld return

你可能感兴趣的:(C++,linux,boost,linux)