Boost库的编译使用

图片还没有哦

在经历了一天半的时间终于把boost库给编译好了 这里记录一下 如果想学习使用boost库的 可以查看官方文档 由于英语太差的本人只有用翻译了 很苦恼

编译Boost库

环境:

提示:下载 boost_1_66_0Visual Studio ToolsVS_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.exebjam.exe两个作用一样,bjam.exe对应的是老版本,b2.exebjam.exe的升级版本

这里如果你懒得切换目录也可以直接把 bootstrap.bat 拖进窗口 路径会自动生成 然后回车就会生成文件了

使用bjam(或者b2)编译 Boost

简便编译方法

其实可以直接 bjam.exe 运行进行编译也可以直接用 但是可能编译出来的版本并不是你想要的 如果你想编译不同的版本 如果你想急于使用可以直接跳到Boost库的使用但是我还是建议你把它看完 这样你会对编译boost库有个比较完整的理解。

命令编译方法

生成好编译程序以后,可以使用命令行来编译Boost了。在当前VisualStudio的工具中输入下面示例命令行即可执行编译:

1
2
3
4
-- 注意空格 多余空格会报错的
bjam stage --toolset=msvc-14.0 --with-thread --stagedir="D:\boost_1_66_1" link=static runtime-link=static runtime-link=shared threading=multi debug release
-- 我用的
bjam stage --toolset=msvc-12.0 --without-python --without-mpi --without-wave --without-graph --without-math --without-regex --without-test --without-program_options --without-serialization --without-signals --stagedir="D:\boost_1_66_2" link=static runtime-link=static runtime-link=shared threading=multi debug release

这里对命令进行说明:

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时使用stagedirinstall时使用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的各种版本

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

C/C++运行库 动态/静态链接。同样有sharedstatic两种方式,这样runtime-linklink一共可以产生4种组合方式,各人可以根据自己的需要选择编译。

threading

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

debug/release

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


Boost库的使用


通过包含文件路径来使用(绝对路径)

头文件的链接

图片还没有哦

静态库的链接

图片还没有哦

通过设置环境变量来使用(宏链接)

配置好宏之后看看有没有路径 如果没有请重启下IDE
图片还没有哦

boost编译出来非常大,除去bin.v2后文件体积还有2G左右,不适合到处放,新建两个环境变量然后引用就可以了

添加环境变量
图片还没有哦

IDE里面宏引用
图片还没有哦

我使用的环境变量:

1
2
3
4
-- 变量名 BOOST_ROOT 变量值 D:\boost_1_66_0
$(BOOST_ROOT)=D:\boost_1_66_0
-- 变量名 BOOST_ROOT_LIB 变量值 D:\boost_1_66_0\stage\lib
$(BOOST_ROOT_LIB)=D:\boost_1_66_0\stage\lib

用绝对路径和使用宏的区别:

  • 绝对路径:当在网上下载其他人写的代码的时候,在工程配置中,不会有绝对路径,需要重新配置。
  • 宏:不需要重新配置了。只要新下载的工程的配置文件中有用宏引用就可以了(前提是有先配置Boost库的环境变量)。

使用代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "boost/thread.hpp"
#include "iostream"

void mythread()
{
std::cout << " hello,thread! " << std::endl;
}

int main(int argc, char* argv[])
{
boost::function<void()> f(mythread);
boost::thread t(f);
t.join();
std::cout << " thread is over! " << std::endl;

system("pause");
return 0;
}

成功:
图片还没有哦

如果你运行成功的话那么你的Boost库就成功的编译了 以后想使用添加到自己的项目里面即可

  • 如果你遇到 编译错误有什么不兼容的 这个一般只会出现在使用简单编译方法

    原因可能就是:

    • 版本对应不上 出现你需要仔细检查下你的版本

      解决方法:

    • 使用命令编译方法 编译对应的版本
  • 如果出现无法打开文件 xxx.lib的请查看你的lib目录下到底有没有那个lib 如果有请查看你的 项目属性 --> C/C++ --> 代码生成 --> 运行库 的类型

bjam参数:
| 命令 | 说明 |
| ———————- | —————————————————————————————————– | ———————————– |
| –build-dir= | 编译的临时文件会放在builddir里(这样比较好管理,编译完就可以把它删除了) |
| –stagedir= | 存放编译后库文件的路径,默认是stage |
| –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- | 只编译指定的库,如输入–with-regex就只编译regex库了。 |
| –show-libraries | 显示需要编译的库名称 |

你可能并没有这么顺利会遇到很多奇怪的问题 下面我给出些链接希望对你有帮助
LNK1104 无法打开文件“libboost_system-vc141-mt-gd-x64-1_68.lib
boost安装提示 Building Boost.Build engine ‘cl’ 不是内部或外部命令,也不是可运行的程序 或批处理文件

参考
boost编译随笔
配置boost环境变量

本文标题:Boost库的编译使用

文章作者:游戏人生

发布时间:2019年04月26日 - 14:04

最后更新:2020年12月27日 - 12:12

原始链接:http://www.tjl-myblog.cn/Boost库的编译使用.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------