Boost库学习笔记(1)—— 安装编译
一、概述 Boost是免费的可移植的C++开源库。Windows平台构建流程类Unix平台(例如:Linux、MacOS)构建流程二、构建方式 如何构建Boost库呢?大部分情况下,并不需要构建,因为大多数的Bo
文章目录
一、概述
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、编译出错"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.hpp
和Windows.h
的包含顺序,把Windows.h
放到boost/asio.hpp
后面包含。 - 方法2:在
Windows.h
包含前增加宏定义WIN32_LEAN_AND_MEAN
。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)