一、概述

        Boost是免费的可移植的C++开源库,这里版本选择1.76.0。

1、Windows平台

参考:Windows平台构建流程
解压boost_1_76_0.zip,进入目录boost_1_76_0,执行命令:

bootstrap.bat

然后执行:

b2.exe install --prefix=D:\boost-1.76.0-windows-x86_64-msvc

boost库将被安装到目录D:\boost-1.76.0-windows-x86_64-msvc下。

2、Linux平台

参考:类Unix平台(例如:Linux、MacOS)构建流程
解压boost_1_76_0.tar.gz,进入目录boost_1_76_0,执行命令:

(1)常规编译

sudo ./bootstrap.sh --prefix=/opt/boost-1.76.0-ubuntu-x64

然后执行(注意: gcc5.4默认是不开启c++11的,某些依赖c++11特性的代码不会生效,部分lib依赖c++11的功能,如果不支持此特性,就不会被编译。比如fiber在没有开启c++11支持下就不会被编译。所以需要打开c++11的支持,gcc5.4下只打开-std=c++11是不能编译fiber的,更高版本的gcc使用-std=c++14 或者-std=c++17也是可以成功):

sudo ./b2 install cxxflags="-std=c++14"

boost库将被安装到目录/opt/boost-1.76.0-ubuntu-x64下,设置环境变量,编辑/etc/profile文件,末尾添加:

export BOOST_ROOT=/opt/boost-1.76.0-ubuntu-x64 # 需要命名为BOOST_ROOT, 否则CMake时会找不到Boost模块
# 运行依赖
export LD_LIBRARY_PATH=$BOOST_ROOT/lib:$LD_LIBRARY_PATH
# 开发依赖
export CPATH=$BOOST_ROOT/include:$CPATH
export LIBRARY_PATH=$BOOST_ROOT/lib:$LIBRARY_PATH

(2)交叉编译

sudo ./bootstrap.sh --prefix=/opt/boost-1.76.0-raspberrypi-armv7l

修改boost_1_76_0目录下的project-config.jam文件,把
using gcc ;
替换为
using gcc : : /opt/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc ;
注意保留空格,如:
在这里插入图片描述

在这里插入图片描述

然后执行(注意: 根据gcc的版本选择cxxflag选项的值)

sudo ./b2 install cxxflags="-std=c++11"

二、构建方式

        如何构建Boost库呢?大部分情况下,并不需要构建,因为大多数的Boost库都仅使用头文件(.hpp):它们完全由包含模板和内联函数的头文件组成,不需要单独编译库二进制文件,也不需要在链接时进行特殊处理。
        只有少部分库才需要单独构建:

  • Boost.Chrono
  • Boost.Context
  • Boost.Filesystem
  • Boost.GraphParallel
  • Boost.IOStreams
  • Boost.Locale
  • Boost.Log ()
  • Boost.MPI
  • Boost.ProgramOptions
  • Boost.Python
  • Boost.Regex
  • Boost.Serialization
  • Boost.Thread
  • Boost.Timer
  • Boost.Wave

        少部分库有可选的单独编译的二进制文件:

  • Boost.Exception
  • Boost.Graph
  • Boost.Math
  • Boost.Random
  • Boost.System
  • Boost.Test

三、链接库

        Visual Studio需要设置工程属性:

  • 配置属性 | C/C++ | 预编译头 | 预编译头”为“不使用预编译头
  • 配置属性 | C/C++ | 常规 | 附加包含目录”添加Boost库头文件路径,例如:E:\workspace\boost_1_76_0

        大部分的Windows编译器和链接器有所谓的Auto-Linking support
        Boost库头文件中有特殊的代码,可以检测编译器选项,并使用这些信息把正确的库名称编码到目标文件中。链接器将从我们所指定的目录选择具有该名称的库文件。
        How boost auto-linking makes choice
        如果不想自动连接,则可以使用BOOST_ALL_NO_LIB宏来取消自动连接,然后自行指定依赖库文件。

四、官方文档

        1.76.0库官方文档说明

五、开发过程注意项

1、编译出错"fatal error C1189: #error : WinSock.h has already been included"

1>C:\Program Files\boost-1.76.0-windows-x86_64-msvc\include\boost-1_76\boost/asio/detail/socket_types.hpp(24,1): fatal error C1189: #error:  WinSock.h has already been included
  • 方法1:调整boost/asio.hppWindows.h的包含顺序,把Windows.h放到boost/asio.hpp后面包含。
  • 方法2:在Windows.h包含前增加宏定义WIN32_LEAN_AND_MEAN
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐