boost1.79编译

2023-10-27

系列文章目录

前言

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( B o o s t I N C L U D E D I R S ) l i n k d i r e c t o r i e s ( {Boost_INCLUDE_DIRS}) link_directories( BoostINCLUDEDIRS)linkdirectories({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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

boost1.79编译 的相关文章

随机推荐

  • android图片压缩上传

    一 调用webservice接口 传的参数是String类型的参数 需要把Bitmap转换为String类型 byte arrayOfByte CommUtil Bitmap2Bytes DangerPointSubmitActivity
  • 关于phpStudy的Less-26空格被过滤使用%a0变乱码无法执行应该带有空格的查询语句

    我的实验环境是 C phpStudy PHPTutorial WWW sqli labs master Less 26 练习sql inject 注入练习第26关 Less 26 输入的空格被过滤了 提示中明显指出select 和 1之间的
  • 腾讯云:MySQL数据库的高可用性分析

    作者介绍 易固武 腾讯高级工程师 参与腾讯账号安全建设 腾讯数据仓库 TDW 优化改造 腾讯云数据库等项目 对大规模分布式存储和计算系统有浓厚的兴趣和经历 MySQL数据库是目前开源应用最大的关系型数据库 有海量的应用将数据存储在MySQL
  • git pull出现Abort没有原因提示

    使用git pull更新时 出现文件冲突 将冲突文件解决后 再进行pull操作 出现abort 但是没有提示原因 这是由于直接在子文件夹下进行pull操作 而其他级别的文件夹下出现也出现文件冲突 而git发现了冲突但是由于不在当前目录下没有
  • 教你一招:解决u盘插入计算机时提示格式化,如何恢复u盘中的文件

    1 插入U盘时 计算机提示格式化 看到这里 到底是格不格呢 别怕 随便你了 2 查看U盘属性 发现都为零 怎么办呢 u盘上面有很多重要文件啊 别急 继续往下看 3 解决办法 1 下载DiskGenius硬盘恢复软件 安装后打开 软件官方下载
  • 招聘数据采集+数据清洗与分析+数据可视化

    1 需求 1 1 数据采集 1 网站解析 利用 chrome 查看网页源码 分析招聘网站网页结构 1 检查 招聘网站 在网页中右键点击检查 或者 F12 快捷键 进入 如下图的查看元素页面 示例图 1 2 检查网站 点击 Network 勾
  • oracle 9i下在线重定义表

    9i提供了联机重定义表的方法 可以让你在基本不影响原表的DML情况下修改表结构 实际上 联机重定义表并不是完全的联机重定义 在最后交换表名的时候会短暂地锁定原表和中间表 但这个过程很短暂 相对于传统方法来说 这是一个进步 9i提供了联机重定
  • 三千书源——愿成为整理最全的书源合集

    引言 古有弱水三千 今有三千书源 勿埋我心 三千大世界 三千书之源 随着 三千书源 渐渐变得充足起来 感谢收藏 希望可以多来看望勿埋我心 注意 现在主流是3 0书源 欢迎在评论区投稿不错的书源 软件下载 3 0 推荐使用 酷安 Github
  • MTSC2020

    MTSC2020中国互联网测试开发大会深圳站 于 2020 年 11 月 20 日至 21 日在深圳宝立方国际酒店召开 为中国质量保证行业奉上一场为期 2 天的技术盛宴 500 来自世界各地的测试精英们汇聚一堂探讨交流 来自阿里巴巴淘系技术
  • CTF新手题

    CTF Capture The Flag 是一种网络安全技能竞赛 它涉及到多个领域 如密码学 逆向工程 漏洞利用 Web安全等 每个比赛都会有多个题目 每个题目都有一个旗帜 玩家需要通过解决问题 攻击漏洞或破解密码等手段 获取旗帜并提交给比
  • MySQL最全面的优化技巧

    如果面试官问你 你会从哪些维度进行 MySQL 性能优化 你会怎么回答 所谓的性能优化 一般针对的是MySQL查询的优化 既然是优化查询 我们自然要先知道查询操作要经过哪些环节 然后思考可以在哪些环节进行优化 查询操作需要经历的基本环节 S
  • FBX SDK快速简笔(基本)

    FBX SDK快速简笔 摘至官方文档 因不开源 大部分地方官方文档中存在保密 以个人理解进行了一部分的推导 该文章免费并承诺不涉及如何利益 FBX模型的组织结构 FBX是以scene graph的结构来存储模型的所有信息 也可以认为是一个多
  • Weka内置特征选择算法整理

    属性评估方法 CfsSubsetEval 根据属性子集中每一个特征的预测能力以及它们之间的关联性进行评估 ChiSquaredAttributeEval 根据与分类有关的每一个属性的卡方值进行评估 ClassifierSubsetEval
  • Vue基础精讲 —— 详解Vue实例、Vue实例的属性和方法

    Vue实例 基本配置 在 build文件夹 下新建 webpack config practice js 配置文件 内容参考 const path require path const HTMLPlugin require html web
  • Flex4,textArea控件的htmlText属性

    它现在包含Text布局框架 Text Layout Framework TLF 而TLF可以作为许多 Spark text组件的基础 例如RichText RichEditableText TextArea和 TextInput等组件 以及
  • 突发奇想把云服务器刷成了黑群晖 ...

    大家好 我是鸟哥 一个半路出家的程序员 前两天准备把自己10年前买的戴尔电脑刷成黑群晖改造成一台家庭存储服务器 折腾了几天后结果把电脑刷成了蓝屏 彻底报废了 后来又突发奇想 准备把手头上的服务器刷成黑群晖 本以为是无法成功的事 结果却很顺利
  • Ubuntu安装Docker

    一 安装条件 1 操作系统要求 需要以下 Ubuntu 版本之一的 64 位版本 Ubuntu Kinetic 22 10 Ubuntu Jammy 22 04 LTS Ubuntu Focal 20 04 LTS Ubuntu Bioni
  • Oracle数据库预警信息阈值设置以及预警信息自动邮件发送到管理员邮箱

    当数据库处于不理想状态时 默认情况下会通过EM发出预警 也可以通过邮件发送给管理员 要设置电子邮件通知 可在EM上 1任何 Database Control 页中 单击页眉和页脚区中的 Setup 设置 链接 2 在 Setup 设置 页中
  • 工作遇到的问题:mybatis注解@Param和分页count

    目录 mybatis注解 Param 分页Count mybatis注解 Param 基于mybatis注解写sql 出现了一个对象映射问题 一开始我没用 Param 因为当时只有一个入参所以没写springboot是能识别到的 但是我后来
  • boost1.79编译

    系列文章目录 文章目录 系列文章目录 前言 一 编译 1 使用vs2019 命令行 用管理员身份运行 2 执行命令 2 第二种方法 3 boost编译动态库 参考 前言 boost自带一套编译工具bjam bjam本身是跨平台的 并且也要自