系列文章目录

文章目录

  • 系列文章目录
  • 前言
  • 一、编译
    • 1.使用vs2019 命令行,用管理员身份运行
    • 2.执行命令
    • 2.第二种方法
    • 3.boost编译动态库
  • 参考

前言

boost自带一套编译工具bjam,bjam本身是跨平台的,并且也要自行编译出来。在boost目录下有bootstrap.sh和bootstrap.bat两个脚本分别用来编译*nix和windows下的bjam。bootstrap脚本可以传入参数,以在编译bjam过程中生成特定的编译boost的配置。这些配置保存在新生成的project-config.jam里,但还可以在运行bjam的时候再传入参数来覆盖。同时生成的b2是bjam的代理,运行哪个的效果都差不多。

一、编译

1.使用vs2019 命令行,用管理员身份运行

2.执行命令

1.解压boost文件,使用编译器的命令行进入解压后的根目录

2.敲入命令.\bootstrap.bat (on Windows)或者./bootstrap.sh (on other operating systems)

3.执行./b2 install --prefix=PREFIX

PREFIX就是你要安装的目录位置,Win32默认在 C:\Boost;Unix默认在 /usr/local on Unix. Linux
注意:执行./b2 install --prefix=PREFIX 我发现在我的c盘下面并没有出现:C:\Boost
于是我把命令改成:./b2 install --prefix=E:\boost\boost1.79\boost_1_79_0_build
确实在E:\boost\boost1.79\boost_1_79_0_build生成了 include 和lib但是并没有生成相应的dll

4.生成lib和dll
这时只会生成lib而没有生成dll
命令行中敲入:./b2 install --prefix=“E:\boost\boost_1_74_0_build\x64” --build-type=complete --toolset=msvc-14.2 threading=multi --build-type=complete address-model=64
这时在E:\boost\boost_1_74_0_build\x64路径下就会生成lib和dll

2.第二种方法

当在第一种方法执行:bjam stage --toolset=msvc-14.2 --stagedir=“D:\boost_lib” link=static runtime-link=static threading=multi debug release

会报错:bjam : 无法将“bjam”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确
,然后再试一次。
所在位置 行:1 字符: 1

  • bjam stage --toolset=msvc-14.2 --stagedir=“D:\boost_lib” link=static …
  •   + CategoryInfo          : ObjectNotFound: (bjam:String) [], CommandNotFoundException+ FullyQualifiedErrorId : CommandNotFoundException

于是执行重新换一个命令:
./b2 toolset=msvc-14.1 link=static runtime-link=shared threading=multi variant=debug
./b2 install --prefix=“E:\boost\boost1.79\boost_1_79_0_build\vc141”

3.boost编译动态库

使用:./b2 toolset=msvc-14.1 link=static runtime-link=shared threading=multi variant=debug
./b2 install --prefix=“E:\boost\boost1.79\boost_1_79_0_build\vc141”
会发现只能生成lib库和include头文件,并不能生成dll动态库
如果,但是运行exe程序时又需要动态库,所以我们会需要boost生成动态库
生成动态库的命令:
./b2 toolset=msvc-14.1 link=shared runtime-link=shared threading=multi variant=debug
./b2 stage --prefix=“E:\boost\boost1.79\boost_1_79_0_build\vc141”
即把 “link=static“,改成
link=shared

 如果即生成动态库,又要生成静态库./b2 toolset=msvc-14.1 link=stage runtime-link=shared threading=multi variant=debug

./b2 install --prefix=“E:\boost\boost1.79\boost_1_79_0_build\vc141”

参考

luckyum

指令格式大概如下:
./b2 toolset=msvc-14.1 link=static runtime-link=shared threading=multi variant=debug
./b2 install --prefix=“D:\ScanSource\download\Boost\vc141”
重要参数
(1)stage/install:
stage表示只生成库(dll和lib),install会生成并安装到系统中,包含头文件的include目录和CMake文件夹。

(2)toolset:
指定编译器,可选的如minGW、msvc等。
vs2017 : msvc-14.1,vs2015 : msvc-14.0, linux :gcc

(3)stagedir/prefix:
stage时使用stagedir,install时使用prefix,表示编译生成文件的路径,与安装路径。

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

(5)runtime-link:
动态/静态链接运行时库。同样有shared和static两种方式,标记如何连接C++运行库,是包含就用静态,使用系统运行库就用动态。

(6)architecture
表示架构,也就是你的CPU架构,所以是x86或者arm

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

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

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

关于生成boost文件名称的说明,解决调用boost库找不到文件的问题:
libboost_atomic-vc141-mt-x32-1_70.lib
libboost_atomic-vc141-mt-x64-1_70.lib
libboost_atomic-vc141-mt-gd-x64-1_70.lib
libboost_atomic-vc141-mt-gd-x32-1_70.lib

(1)–build-type=complete时link,runtime-link3种组合下debug, release的多线程版本都生成出来了除此之外还生成了link=static,runtime-link=static的debug, release的单线程版本

(2)Boost库的使用方式link决定了生成的库的格式:lib(静态链接库-static), dll(动态链接库-share)

当link是static时,生成的静态库: libboost_*****.lib

当link是share时,生成的动态链接库:boost_****.dll 和对应的 libboost_*****.lib

(3)Boost库的编译中runtime-link,决定了生成库与C/C++库的连接方式

当runtime-link是static使: 生成的库文件名有 s

当runtime-link是share使: 生成的库文件名没有s

(4)link以及与runtime-link缺省的设置是:

link是静态的(便于整合到应用中,避免单独移动boost的相关动态连接库)

runtime-link是share的,这样可以动态调用c/C++运行时库,方便

(5)degug版本的库名称: 含有gd

release版本中的库名称;不含有gd

(6)threading,设置mutl 多线程的库,则库名称包含:mt

如果是单线程,则没有mt

(7)我们还可以分析一下 boost 库的命名特点

以“lib”开头的是“link=static”版本(静态链接库版本,没有dll),而直接以“boost”开头的是“link=shared”版本(动态链接库版本,包含lib和dll)。
所有的库都含有"boost"前缀。
紧随其后的是boost库名称(比如date_time库)。
然后是编译器的版本,与库名称之间以"-“而不是下划线”“分隔(比如 -vc120)。
有“mt”的为“threading=multi”版本,没有的则是“threading=single”版本。
有“s”的为“runtime-link=static”版本,没有的则是“runtime-link=shared”版本。
有“gd”的为debug版本,没有的则是release版本。
所有的库都含有boost库的版本号结尾(比如1_56,其中的”.“以下划线”
"代替)
在IDE中关联Boost库,我的项目都是采用CMake方式创建的
QTCreator 中点击左侧的项目菜单,在CMake参数表格中添加
Boost_INCLUDE_DiR 设置为 “boost_1_70_0\include\boost-170”
Boost_DIR 设置成 “boost_1_70_0\lib\cmake\Boost-1.70.0”
点击 apply Configuration Changes,编译参数。

MSVC 中,先使用CMake-GUI工具打开CMake项目,设置参数同样,
点击Configure,编译参数。

CMakeLists.txt 包括

find_package(Boost 1.70.0 REQUIRED)
if(Boost_FOUND)
set(Boost_LIBRARY_DIRS D:/ScanSource/download/Boost/vc141_64/lib)
message(Boost_INCLUDE_DIRS " ${Boost_INCLUDE_DIRS}“)
message(Boost_LIBRARY_DIRS " ${Boost_LIBRARY_DIRS}”)
endif()

include_directories(BoostINCLUDEDIRS)linkdirectories({Boost_INCLUDE_DIRS}) link_directories(BoostI​NCLUDED​IRS)linkd​irectories({Boost_LIBRARY_DIRS})
注意事项
1、CMake网站有引用Boost的约定参数说明,引用过程中出错可以参考文档说明。
2、注意使用的Boost的版本,路径是否与项目一致,出现错误一般都是没有找到头文件路径、没有找到Lib路径、使用的32位与64位版本错误,使用的动态库、静态库版本错误。
通过生成的文件名可以区分,了解“mt”“s”“gd” ,“lib”“dll”的意思,如果一切顺利就可以放心使用了。

如果只是需要Release版本有一个Windows Binaries的下载链接,解压就好了。。。。https://dl.bintray.com/boostorg/release/1.70.0/binaries/

编译成功后运行执行档,如果出现

error while loading shared libraries: libboost_system.so.1.52.0: cannot open shared object file: No such file or directory

是因为系统在当前注册的搜索路径{PATH}中找不到所需的共享库。PATH是Enviroment Variable:

echo “$HOME”

echo “$PATH”

输出环境变量的值;

修改或设置则可以用export指令:

export PATH=${PATH}:/usr/local/lib:/usr/local/include

boost1.79编译相关推荐

  1. Linux随笔16-主从DNS服务搭建以及智能DNS服务搭建、基于CentOS7.6编译安装MySQL-5.7.32

    Contents 1. DNS主从服务器搭建 1.1. DNS简介 1.2. DNS主从服务搭建 1.2.1. 主DNS服务器配置 1.2.2. 从DNS服务器配置 1.2.3. Web服务器准备 1 ...

  2. paxos 练手 推进中

    学习https://github.com/huoyu820125/SecondPaxos 自己编写网络版本 在学习过程将此代码的线程 锁等改成c++11  就不用包含那么多文件 主要更改如下 1 // ...

  3. 错误 LNK1104 无法打开文件“boost_thread-vc142-mt-gd-x64-1_79.lib”

    系列文章目录 文章目录 系列文章目录 前言 一.分析原因 二.解决办法 1.直接下载boost_thread-vc142-mt-gd-x64-1_79.lib 2.自己编译boost_thread-v ...

  4. C++比Python快50倍?如何让C++和Python优势互补?(Boost::Python)

    目录 1 为什么需要多语言联合编程? 2 Python调用C++的主要方式 2.1 SWIG 2.2 Boost::Python 2.3 ctypes 3 Boost::Python安装 4 测试实例 ...

  5. Boost库学习笔记(一)安装与配置

    Boost库学习笔记(一)安装与配置 1. 获取boost https://www.boost.org/users/history/version_1_79_0.html 任选其一 boost的目录结 ...

  6. Thrift在Windows及Linux平台下的安装和使用示例

    thrift介绍 Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的RPC(远程服务调用)框架. 本文主要目的是分别介绍在Windows及Linux平台下的Thri ...

  7. (转)Thrift在Windows及Linux平台下的安装和使用示例

    转载自Thrift在Windows及Linux平台下的安装和使用示例 thrift介绍 Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的RPC(远程服务调用)框架 ...

  8. 基于C++的高性能http框架cinatra及其web框架示例feather介绍及开发演示

    说起web开发框架,一定会想到java,php,python等快速开发语言,在从多web开发技术中少有使用C++进行开发,虽然C++性能优越,但是由于开发周期长,语言本身的复杂性,不符合当前快速敏捷开 ...

  9. html无插件播放流,浏览器无插件播放网络视频流RTSP/H264/WEB CAM

    问题 变通的方案 使用Canvas间接播放视频流 实时视频流转码 boost1.69编译 Pthread编译 业务流程 代码摘要 视频流转RGBA H5图像绘制 问题 应用系统中设计到网络视频流相关的 ...

  10. 转(JAVA的JNI调用)

    转载于:https://www.cnblogs.com/GDUT/p/3806771.html 由于JNI调用C和调用C++差不多,而且C++中可以混合写C代码,所以这里主要是写关于JNI调用C++的 ...

最新文章

  1. GMM(Gaussian mixture model, 高斯混合模型)
  2. Chrome DevTools:在 Profile 性能分析中显示原生 javascript 函数
  3. boost::fibers::numa::topology用法的测试程序
  4. 【Java类加载机制】深入类加载器(二)自定义加密、解密类加载器
  5. Android学习笔记——数据库
  6. 机器学习之数据预处理——数据清洗(缺失值、异常值和重复值的处理)
  7. 如何修改Qt Creator的界面语言
  8. Linux虚拟文件系统(内核初始化二)
  9. 050、动手实验:使用 jstat 摸清线上系统的JVM运行状况
  10. 小程序源码:微信智慧外链接致富版微信小程序源码下载,支持多端转换-多玩法安装简单
  11. 整数进制转换技巧以及相关算法题讲解(简洁易懂)
  12. 10家不错的iphone编程资源站
  13. 微信小程序对接串口摄像头
  14. 什么是零知识证明?Tokenview
  15. 使用Tensorflow2和Pytorch实现线性回归
  16. 企业微信群机器人怎么用
  17. 打字游戏c语言easyx,打字小游戏(天降字母)Visual Studio+EasyX
  18. 戴森设计大奖,以可持续化设计改变世界
  19. ubuntu环境下制作win10启动盘,ubuntu安装图形化磁盘分区工具
  20. NoSQLRedis的介绍和Redis安装部署,通过yum在线安装Redis,通过源码安装Redis;

热门文章

  1. Word分栏在排版中的应用
  2. MATLAB中clc命令详解
  3. 做数据分析,一定会用到的12类实用图表
  4. 2017——小米——句子反转
  5. 如何使用网页版Instagram来发布图片
  6. PostgreSQL下载安装教程(及PostGIS)
  7. Java随笔-线程stop与interrupt
  8. 改进灰色预测matlab代码,灰色预测模型Matlab代码[比赛已经用过,保真好使]
  9. 移植Python3到TQ2440(一)
  10. 【houdini hom】弹砖块