Win10系统中使用VS2017编译安装C++ boost库

我以编译安装 boost_1_73_0 版本为例:

首先安装VS2017(其他版本也可以),然后下载boost库的源码安装包:

boost下载地址:Boost Version History

1.选择一个需要的版本,这里我选择的是1.73.0版本

2.我们是在Windows环境编译安装可以选择这个zip压缩包

3.下载压缩包后,解压出如下文件,路径不限:

(我解压到E盘的boost_1_73_0文件夹中)

 4.打开VS2017的命令行窗口(最好是以管理员身份打开)

5.命令行中切换到你刚刚解压出来的文件夹中,然后执行bootstrap.bat文件,此时会生成b2.exe文件

(我上面是解压到“E:\boost_1_73_0”路径中的)

 6.命令行中执行上一步生成的b2.exe文件,传入安装目标路径(此过程很漫长,可能要十几分钟)

(例如我想安装在  “C:\boost_1_73_0”  路径中可以这样输入)

注意:此时同时生成的是X86和X64架构,32位和64位的静态库不是动态库。

如有特殊生成需要还能附加以下参数控制编译安装结果:

--toolset=msvc  编译器类别,可以是gcc,或者是msvc

扫描二维码关注公众号,回复: 14681243 查看本文章

--target-os=Windows  目标操作系统,可以是Windows,Linux

--variant=release  生成类型,可以是 debug(-gd-)或者release (-)

--threadapi=win32  线程API的实现,可以是win32或者pthread,在windows上编译就用win32

--link=static  链接库类型,可以是静态的static,也可以是shared,对应windows上的库就是.lib或者是dll

--runtime-link=static  动态还是静态链接C/C++运行时库。同样有shared (-)和static (-s-)两种方式,这样runtime-link和link可以产生4种组合方式,可以根据需要选择编译.

一位在微软做过编译器开发的大牛是这样解释的:

假设一个库A依赖于库B,我们自己的程序client依赖于库A,即:

那么,link指的是client->A,runtime-link指的是A -> B

配置

链接过程

运行时需要的文件

link=static

runtime-link=static

client通过A.a (A.lib)静态包含A;

A通过B.a (B.lib)静态包含B;

不关 .so .dll的事

client

link=static

runtime-link=shared

client通过A.a (A.lib)静态包含A;

在运行时,client要动态调用B.so (B.dll)

client

B.so (B.dll)

link=shared

runtime-link=shared

client会包含A.a (A.lib);

A会包含 B.a (B.lib);

但都只保存动态库的真正实现的stub,运行时通过stub去动态加载 A.so (A.dll), B.so (B.dll) 中的实现

client

A.so (A.dll)

B.so (B.dll)

link=shared

runtime-link=static

client会包含A.a (A.lib),但只包含真正实现的stub;

A通过B.a (B.lib)静态包含B;

运行时,client会动态调用A.so (A.dll)

client

A.so (A.dll)

--prefix=DIR  安装路径

--user-config= 用户自定义配置文件,在cross compile的时候可以用来配置编译工具链

--address-model=32  生成32位还是64位库文件

--architecture=x86  cpu架构,一般为x86或x64,嵌入式平台为arm

编译安装64位的Release版的静态链接库可以执行下面的指令:(-mt-s-)

.\b2.exe variant=release threading=multi threadapi=win32 link=static runtime-link=static --prefix=E:\boost_1_77_0 address-model=64 architecture=x86 install -j8

-j8参数代表8线程同时编译,可以提高编译安装的速度。

 7.编译安装boost库完成,在我输入的安装目标路径中会产生include和lib两个文件夹

<include> 包含文件

<lib>  静态库文件

8.安装完成。保留第7步得到的两个文件夹(include和lib)即可,其他都没用了可以删掉了,除出你留着可能会编译成其他架构,例如改成arm架构,改成动态库等你就需要重新编译。

猜你喜欢

转载自blog.csdn.net/wu10188/article/details/124248455