在经历了一天半的时间终于把boost库给编译好了 这里记录一下 如果想学习使用boost库的 可以查看官方文档 由于英语太差的本人只有用翻译了 很苦恼
编译Boost库
环境:
- Windows7
- Visual Studio 2017
- boost_1_66_0
提示:下载 boost_1_66_0用
Visual Studio Tools
的VS_2017的开发人员命令提示符
来编译 别用cmd命令窗口来编译boost
用其他VS版本也是可以的
提前准备
解压 boost库 使用 VS_2017的开发人员命令提示符
窗口切换到bootstrap.bat
文件目录下 我的是在E盘下 这里做个示范
1 | cd /d E:\boost_1_66_0 // cd /d 表示切换到任意路径下 后面分路径即可 |
然后执行 bootstrap.bat
(窗口内输入文件名然后回车就是执行了)稍等片刻后就会生成 b2.exe bjam.exe project-config.jam bootstrap.log
四个文件。其中b2.exe
和bjam.exe
两个作用一样,bjam.exe
对应的是老版本,b2.exe
是bjam.exe
的升级版本
这里如果你懒得切换目录也可以直接把
bootstrap.bat
拖进窗口 路径会自动生成 然后回车就会生成文件了
使用bjam(或者b2)编译 Boost
简便编译方法
其实可以直接
bjam.exe
运行进行编译也可以直接用 但是可能编译出来的版本并不是你想要的 如果你想编译不同的版本 如果你想急于使用可以直接跳到Boost库的使用但是我还是建议你把它看完 这样你会对编译boost库有个比较完整的理解。
命令编译方法
生成好编译程序以后,可以使用命令行来编译Boost了。在当前VisualStudio的工具中输入下面示例命令行即可执行编译:
1 | -- 注意空格 多余空格会报错的 |
这里对命令进行说明:
stage/install
stage
表示只生成库(dll和lib), install
还会生成包含头文件的include
目录。推荐使用stage
,因为install
生成的这个include
目录实际就是boost
安装包解压缩后的boost
目录(X:\boost_X_XX_X\boost
,只比include
目录多几个非hpp文件,都很小),所以可以直接使用,而且不同的IDE都可以使用同一套头文件,这样既节省编译时间,也节省硬盘空间。
–toolset
指定编译器,可选的如borland、gcc、msvc(VC6)、msvc-9.0(VS2008msvc-10.0(VS2010)、msvc-11.0(VS2012)、msvc-12.0(VS2013)、msvc-14.0(VS2015)、msvc-14.1(VS2017)
等。
address-model
表示多少位 address-model=32 address-model=64 默认32/64都编译
–without/with
选择不编译/编译哪些库。因为python、mpi
等库我都用不着,所以排除之。还有wave、graph、math、regex、test、program_options、serialization、signals
这几个库编出的静态lib都非常大,所以不需要的也可以without
。这可以根据各人需要进行选择,默认是全部编译。但是需要注意,如果选择编译python
的话,是需要python
语言支持的,可以到python官方主页下载安装。查看boost
包含库的命令是bjam --show-libraries
。
–stagedir/prefix
stage
时使用stagedir
,install时
使用prefix
,表示编译生成文件的路径。推荐给不同的IDE指定不同的目录,如VS2017对应的是 x:\boost_1_66_0\lib\msvc-14.1
。默认在stage
目录下
build-dir
编译生成的中间文件的路径。默认就在根目录(X:\boost_X_XX_X\boost)下,目录名为bin.v2,等编译完成后可将这个目录全部删除(没用了),所以不需要去设置。
–build-type=complete
表示生成debug release static shared的各种版本
link
生成动态链接库/静态链接库。生成动态链接库需使用shared
方式,生成静态链接库需使用static
方式。一般boost
库可能都是以static
方式编译,因为最终发布程序带着boost
的dll感觉会比较累赘。
runtime-link
C/C++
运行库 动态/静态链接。同样有shared
和static
两种方式,这样runtime-link
和link
一共可以产生4种组合方式,各人可以根据自己的需要选择编译。
threading
单/多线程编译。一般都写多线程程序,当然要指定multi
方式了;如果需要编写单线程程序,那么还需要编译单线程库,可以使用single
方式。
debug/release
编译debug/release版本。一般都是程序的debug版本对应库的debug版本,所以两个都编译。
Boost库的使用
通过包含文件路径来使用(绝对路径)
头文件的链接
静态库的链接
通过设置环境变量来使用(宏链接)
配置好宏之后看看有没有路径 如果没有请重启下IDE
boost编译出来非常大,除去bin.v2后文件体积还有2G左右,不适合到处放,新建两个环境变量然后引用就可以了
添加环境变量
IDE里面宏引用
我使用的环境变量:
1 | -- 变量名 BOOST_ROOT 变量值 D:\boost_1_66_0 |
用绝对路径和使用宏的区别:
- 绝对路径:当在网上下载其他人写的代码的时候,在工程配置中,不会有绝对路径,需要重新配置。
- 宏:不需要重新配置了。只要新下载的工程的配置文件中有用宏引用就可以了(前提是有先配置Boost库的环境变量)。
使用代码:
1 |
|
成功:
如果你运行成功的话那么你的Boost库就成功的编译了 以后想使用添加到自己的项目里面即可
如果你遇到 编译错误有什么不兼容的 这个一般只会出现在使用简单编译方法
原因可能就是:
版本对应不上 出现你需要仔细检查下你的版本
解决方法:
- 使用命令编译方法 编译对应的版本
如果出现无法打开文件 xxx.lib的请查看你的lib目录下到底有没有那个lib 如果有请查看你的
项目属性 --> C/C++ --> 代码生成 --> 运行库
的类型
bjam参数:
| 命令 | 说明 |
| ———————- | —————————————————————————————————– | ———————————– |
| –build-dir=
| –stagedir=
| –build-type=complete | 编译所有版本,不然只会编译一小部分版本(确切地说是相当于:variant=release, threading=multi;link=shared | static;runtime-link=shared) |
| variant=debug | release | 决定编译什么版本(Debug or Release?) |
| link=static | shared | 决定使用静态库还是动态库。 |
| threading=single | multi | 决定使用单线程还是多线程库。 |
| runtime-link=static | shared | 决定是静态还是动态链接C/C++标准库。 |
| –with-
| –show-libraries | 显示需要编译的库名称 |
你可能并没有这么顺利会遇到很多奇怪的问题 下面我给出些链接希望对你有帮助
LNK1104 无法打开文件“libboost_system-vc141-mt-gd-x64-1_68.lib
boost安装提示 Building Boost.Build engine ‘cl’ 不是内部或外部命令,也不是可运行的程序 或批处理文件