1. Boost库下载安装
1.1 Boost库文件下载
Boost库官网https://www.boost.org/,首先进入官网下载对应的Boost库文件。点击下图所示红框中Download进入下载页面。更多版本点击链接下载。
进入下载页面后,Windows用户选择第一个软件包。
1.2 Boost库安装
软件包解压后如下图所示,找到其中的bootstrap.bat文件:
打开Developer Command Prompt for VS 2019,切换到解压后的软件包路径下,运行bootstrap.bat。
我的软件包路径是 D:\Learning\boost_1_70_0
cd D:\Learning\boost_1_70_0
运行bootstrap.bat文件
bootstrap.bat
接下来进行编译,这里详细讲解一下bjam的命令行参数。首先,它涉及到编程环境的搭建,你需要根据自己今后具体的使用环境来选择合适的命令行参数;其次,它影响到你的硬盘空间,完全编译的话据说在3G以上,所以不需要的配置和不需要的库就可以不编译了。综合以上两点因素,本人使用的bjam命令如下:
bjam install --toolset=msvc-14.2 --prefix="D:\Learning\Boost" link=static runtime-link=shared threading=multi address-model=64
等待编译,大概十分钟左右。
接下来详细解释一下每个参数的含义:
stage/install:stage表示只生成库(dll和lib),install还会生成包含头文件的include目录。
toolset:指定编译器,可选的如borland、gcc、msvc(VC6)、msvc-9.0(VS2008)等,如果使用msvc,Visual Studio版本与MSVC版本号的对应关系可参考此文章。
without/with:选择不编译/编译哪些库。因为python、mpi等库我都用不着,所以排除之。还有wave、graph、math、regex、test、program_options、serialization、signals这几个库编出的静态lib都非常大,所以不需要的也可以without掉。这可以根据各人需要进行选择,默认是全部编译。但是需要注意,如果选择编译python的话,是需要python语言支持的,应该到python官方主页http://www.python.org/下载安装。查看boost包含库的命令是bjam --show-libraries。
stagedir/prefix:stage时使用stagedir,install时使用prefix,表示编译生成文件的路径。推荐给不同的IDE指定不同的目录,如VS2008对应的是E:\SDK\boost\bin\vc9,VC6对应的是E:\SDK\boost\bin\vc6,否则都生成到一个目录下面,难以管理。如果使用了install参数,那么还将生成头文件目录,vc9对应的就是E:\SDK\boost\bin\vc9\include\boost-1_46\boost,vc6类似。
build-dir:编译生成的中间文件的路径。这个本人这里没用到,默认就在根目录(E:\SDK\boost)下,目录名为bin.v2,等编译完成后可将这个目录全部删除(没用了),所以不需要去设置。
link:生成动态链接库/静态链接库。生成动态链接库需使用shared方式,生成静态链接库需使用static方式。
runtime-link:动态/静态链接C/C++运行时库。同样有shared和static两种方式,这样runtime-link和link一共可以产生4种组合方式,各人可以根据自己的需要选择编译。一般link只选static的话,只需要编译2种组合即可,即link=static runtime-link=shared和link=static runtime-link=static,本人一般就编这两种组合。
threading:单/多线程编译。一般都写多线程程序,当然要指定multi方式了;如果需要编写单线程程序,那么还需要编译单线程库,可以使用single方式。
debug/release:编译debug/release版本。一般都是程序的debug版本对应库的debug版本,所以两个都编译。
2. Visual Studio环境配置
2.1 构建一个控制台应用
2.2 配置项目中的属性表
X = static 时 项目属性 → C/C++ →代码生成 → 运行库 【多线程调试(/MTd)】
X = share 时 项目属性 → C/C++ →代码生成 → 运行库 【多线程调试 DLL (/MDd)】
2.3 验证
配置完之后,需要编写代码确认一下,安装与配置是否正常,我用以下代码进行了验证(代码来自https://blog.csdn.net/u012424737/article/details/110439018):
#include <boost/thread/thread.hpp>
#include <boost/function/function0.hpp>
#include <iostream>
class boostTest
{
private:
boost::thread* thread_;
bool running;
public:
boostTest()
{
std::cout << "Hello world, I''m a thread!" << std::endl;
running = true;
}
~boostTest()
{
std::cout << "Destroy the object!" << std::endl;
thread_->join();
}
void startThread()
{
thread_ = new boost::thread(boost::bind(&boostTest::sayHello, this));
std::cout << " Thread " << thread_->get_id() << " is started! " << std::endl;
}
void stopThread()
{
running = false;
}
void sayHello()
{
int counter = 1;
std::cout << " Hello world! " << std::endl;
while(running)
{
std::cout << " Trapped in the loop! Time:"<< counter++ << std::endl;
Sleep(1000);
}
}
};
int main(int argc, char* argv[])
{
boostTest *test = new boostTest();
test->startThread();
Sleep(2500);
test->stopThread();
delete test;
return 0;
}
运行结果如下所示:
到此为止,配置与验证都完成了,可以放心的去探索 Boost 库的强大功能了!