windows编译boost
1. https://www.boost.org 下载boost源码 boost_1_73_0.zip解压。
2.准备编译前的配置,打开vs2017 x86 CMD工具,进入目录boost_1_73_0\,执行bootstrap.bat,等待初始化完毕,
会生成b2.exe和bjam.exe两个程序,所有编译工作都是通过b2.exe或bjam.exe完成,可以通过help查看参数,b2.exe方式比较新。
指令格式大概如下:
b2 install --toolset=msvc-14.1 --prefix="D:\Boost\vc141" link=static runtime-link=shared threading=multi debug release
(1)stage/install:
stage表示只生成库(dll和lib),install还会生成包含头文件的include目录和CMake文件夹。
(2)toolset:
指定编译器,可选的如minGW、msvc等。
vs2017 : msvc-14.1,vs2015 : msvc-14.0,
(3)without/with:
选择不编译/编译哪些库。因为python、mpi等库我都用不着,所以排除之。还有wave、graph、math、regex、test、program_options、serialization、signals这几个库编出的静态lib都非常大,所以不需要的也可以without掉。这可以根据各人需要进行选择,默认是全部编译。但是需要注意,如果选择编译python的话,是需要python语言支持的,应该到python官方主页http://www.python.org/下载安装。
查看boost包含库的命令是b2 --show-libraries。
4)stagedir/prefix:
stage时使用stagedir,install时使用prefix,表示编译生成文件的路径。推荐给不同的IDE指定不同的目录,32位、64位要区分开,不过IDE也有区分。
(5)build-dir:
编译生成的中间文件的路径。这个本人这里没用到,默认就在根目录下,目录名为bin.v2,等编译完成后可将这个目录全部删除(没用了),所以不需要去设置。
(6)link:
生成动态链接库/静态链接库。生成动态链接库需使用shared方式,生成静态链接库需使用static方式。一般boost库可能都是以static方式编译,因为最终发布程序带着boost的dll感觉会比较累赘。
(7)runtime-link:
动态/静态链接C/C++运行时库。同样有shared和static两种方式,这样runtime-link和link一共可以产生4种组合方式,各人可以根据自己的需要选择编译。
(8)architecture
表示架构,也就是你的CPU架构,所以是x86
(9)address-model
地址长度,32表示编译32位的库文件,64表示编译64位的库文件
(8)threading:
单/多线程编译。一般都写多线程程序,当然要指定multi方式了;如果需要编写单线程程序,那么还需要编译单线程库,可以使用single方式。
(9)debug/release:
编译debug/release版本。一般都是程序的debug版本对应库的debug版本,所以两个都编译。
编译boost
编译boost的命令比较复杂,尤其是 link, runtime-link 这两个选项的功能分不太清楚,他们共有4种相互组合,这些相互组合各有什么含义呢?
所以首先做个实验,仅编译date_time库,观察一下这两个选项的作用。
第一种;
b2 stage --toolset=msvc-12.0 --with-date_time --stagedir="E:\eCode\boost_1_56_0\bin\vc12" link=static runtime-link=static threading=multi debug release
第二种;
b2 stage --toolset=msvc-12.0 --with-date_time --stagedir="E:\eCode\boost_1_56_0\bin\vc12" link=static runtime-link=shared threading=multi debug release
第三种;
b2 stage --toolset=msvc-12.0 --with-date_time --stagedir="E:\eCode\boost_1_56_0\bin\vc12" link=shared runtime-link=shared threading=multi debug release
第四种:
b2 stage --toolset=msvc-12.0 --with-date_time --stagedir="E:\eCode\boost_1_56_0\bin\vc12" link=shared runtime-link=static threading=multi debug release
第五种:
b2 stage --toolset=msvc-12.0 --with-date_time --stagedir="E:\eCode\boost_1_56_0\bin\vc12_2" (默认,为避免将前面的结果覆盖,配置另一目录vc12_2存放)
第五种:
b2 stage --toolset=msvc-12.0 --with-date_time --stagedir="E:\eCode\boost_1_56_0\bin\vc12_2" --build-type=complete(为避免将前面的结果覆盖,配置另一目录vc12_3存放)说明:
(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
(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 多线程的库,则库名称包含:mutl
如果是单线程,则没有mutl
(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(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})注意事项
1、CMake网站有引用Boost的约定参数说明,引用过程中出错可以参考文档说明。
2、注意使用的Boost的版本,路径是否与项目一致,出现错误一般都是没有找到头文件路径、没有找到Lib路径、使用的32位与64位版本错误,使用的动态库、静态库版本错误。
通过生成的文件名可以区分,了解“mt”“s”"gd" ,“lib”“dll”的意思,如果一切顺利就可以放心使用了。
转自:https://zhuanlan.zhihu.com/p/85806857
windows编译boost的更多相关文章
- 如何在WINDOWS下编译BOOST C++库 .
		如何在WINDOWS下编译BOOST C++库 cheungmine 2008-6-25 写出来,怕自己以后忘记了,也为初学者参考.使用VC8.0和boost1.35.0. 1)下载boost ... 
- windows上编译boost库
		要用xx库,编译boost时就指定--with-xx.例如: # 下载并解压boost_1.58 # 进入boost_1.58目录 bjam.exe toolset=msvc-14.0 --build ... 
- C++ 系列:编译 boost
		Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ... 
- VS2010编译Boost 1.57 静态链接库
		http://www.cnblogs.com/cuish/p/4175491.html 0.前提 Boost库版本 1.57.0 下载地址 http://www.boost.org/users/his ... 
- Windows编译安装使用cephfs客户端
		本文介绍如何将cephfs映射到windows的一个盘上,以磁盘映射的方式访问cephfs. 1.下载必要安装包 tdm-gcc:(安装时选32位)https://sourceforge.net/pr ... 
- Visual studio 2017编译  boost
		下载: https://www.boost.org/ 或者 https://dl.bintray.com/boostorg/release/1.66.0/source/ 下载完成以后解压到自己想要 ... 
- 编译boost到各个系统平台 mac,iOS,linux,android,wind
		编译boost到各个系统平台 mac,iOS,linux,android,wind git地址:https://github.com/czjone/boost git仓库:https://github ... 
- windows安装boost
		2019年11月4日16:00:36 Boost.Asio 使用文档 https://mmoaay.gitbooks.io/boost-asio-cpp-network-programming-chi ... 
- 在linux环境编译boost
		1.在boost官网:http://www.boost.org/下载相应版本的boost 2.解压boost到相应目录,在boost跟目录下有b2可执行程序,可以通过输入命令“/b2 --help”, ... 
随机推荐
- JPA用法中字段起名规范
			前两天在学习Springboot使用JPA 来操作数据库时,碰到一个问题,最终发现了JPA写法中表字段名称要写规范. 记录下来提醒自己. CityEntity是一个City的实体类. 1 @Table ... 
- 00JAVA语法基础_六位验证码 01
			在网上看了许多的源程序,涉及到的东西也不太一样,多了图形处理的,由于还没理解太明白,只是做了控制台. package Six_Code; import java.util.Random; import ... 
- springMVC-5-视图解析器
			视图和视图解析器工作流程 第一步:获取到ModelAndView对象 请求处理方法执行完成后,无论返回是String,View 还是 ModeMap 类型,Spring MVC 也会在内部将它们装配成 ... 
- 如何选择数据分析工具?BI工具需要具备哪些功能?
			数据分析使企业能够分析其所有数据(实时,历史,非结构化,结构化,定性),以识别模式并生成洞察力,以告知并在某些情况下使决策自动化,将数据情报与行动联系起来.当今最好的数据分析工具解决方案支持从访问.准 ... 
- Xmanager7 xshell7 xftp7安装破解教程
			NetSarang Xmanager7 Power Suite是可以浏览远端X窗口系统的软件,远程把Unix/Linux的桌面无缝地带到Windows桌面上.旗下的Xshell Xftp插件是一款常用 ... 
- 深入刨析tomcat 之---第12篇 how tomcat works( 第17章 )  解析catalina.bat 梳理启动流程
			我们如何启动tomcat呢? 答案是双击startup.bat文件,这个文件在bin目录下 @echo off 不显示批处理命令 rem Licensed to the Apache Softw ... 
- 字符串匹配算法(三)-KMP算法
			今天我们来聊一下字符串匹配算法里最著名的算法-KMP算法,KMP算法的全称是 Knuth Morris Pratt 算法,是根据三位作者(D.E.Knuth,J.H.Morris 和 V.R.Prat ... 
- 关于Asp.Net MVC  html.renderaction传递参数
			View视图 @{html.renderaction("控制器方法名","控制器名称",new{params1="参数值"})} Contr ... 
- spring框架的学习->从零开始学JAVA系列
			目录 Spring框架的学习 框架的概念 框架的使用 Spring框架的引入 概念 作用 内容 SpringIOC的学习 概念 作用 基本使用流程 SpringIOC创建对象的三种方式 通过构造器方式 ... 
- Java程序设计(2021春)——第四章接口与多态笔记与思考
			Java程序设计(2021春)--第四章接口与多态笔记与思考 本章概览: 4.1 接口(接口的概念和声明接口.实现接口的语法) 4.2 类型转换 4.3 多态的概念 4.4 多态的应用 4.5 构造方 ... 
