在Windows平台VS2013环境下编译Boost库

来源:互联网 发布:微信红包的随机算法 编辑:程序博客网 时间:2024/05/17 04:42

Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。

Boost库由C++标准委员会库工作组成员发起,在C++社区中影响甚大,其成员已近2000人。 

Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。

(以上文字摘自【开源中国】)


本文记录(介绍)Boost库的编译过程。

操作系统为64位版本Windows8.1 ,编译环境为Visual Studio 2013 (msvc12.0)


一、准备

下载boost代码(此文首次编辑时,Boost的最新版本为1.57.0)

需要下载请访问官网http://www.boost.org/

或者SourceForge页面https://sourceforge.net/projects/boost/

我下载的是boost_1_57_0.zip

下载完之后解压(可以按照个人喜好设置解压路径)

请保证目标位置所在磁盘有足够空间,因为编译后产生了大量的中间文件,最后将占用近2G的空间


二、开始编译

1、生成bjam.exe程序

切换到解压目录,找到bootstrap.bat,(双击)运行,不出意外就会生成bjam.exe(和其他文件)

保险起见,我在bootstrap.bat的内容末尾添加了一行暂停语句


也可以在控制台(命令行)窗口(Win+R调出cmd窗口)中执行,把bat文件拖拽到cmd窗口就可以了


2、设置编译参数

我个人偏好自己写一个bat文件(而不是在cmd窗口输入命令),内容如下

(原本所有命令都在一行,为了方便阅读才拆分为多行显示)

@echo build boost librarybjam --toolset=msvc-12.0 --prefix=D:\Develop\Boost --build-type=complete     link=shared     variant=release     threading=multi     runtime-link=shared install@pause


其中各词语的含义如下

bjam 是主程序(bjam.exe)

--toolset=msvc-12.0 表示编译工具集是MSVC12.0 (即VS2013)

--prefix=D:\Develop\Boost 表示编译后的安装目录

--build-type=complete 表示尝试完整编译(可以选择只编译其中的一些组件或者忽略某些组件)

link=shared 表示动态链接(使用动态链接库)

variant=release 表示以Release模式编译
thread=multi 表示编译为多线程

runtime-link=shared 表示生成动态链接库(dll)

install 表示安装(类似于CMake的install,就是将对应include、lib、bin等文件拷贝到安装目录)


更多的参数及其设置可以参考相关资料(网络上的相关资料很丰富,找到适合的参考一下就行了)


3、编译

执行以上命令(在CMD窗口输入或者编写bat文件双击运行),我设置的是完全编译,耗时约10分钟

在安装目录下有include和lib两个文件夹

在include目录下有几个层次文件夹,我把底层文件夹下的所有文件剪切到include\boost目录下,感觉更“整洁”

注意,必须是\include\boost\双层结构,而不是\include\单层结构,否则无法正常使用

下图是我的boost文件夹下内容布局



然后将lib文件夹下的dll文件剪切出来粘贴到新建的bin目录,余下的lib文件保留

我的lib文件夹如下(左)                                              bin文件夹如下(右)

      


三、配置编译环境参数

这一步和其他库的配置方法基本上是一样的,无外乎设置include目录、lib目录和bin目录等,此处不再赘述。


四、使用示例

测试程序的源代码

#include <iostream>#include <boost/array.hpp>using namespace std;using namespace boost;void test_array(){cout << "array test" << endl;array<int, 10> ia = { 1, 2, 3, 4, 5 };for (size_t i = 0; i<ia.size(); ++i){cout << ia[i] << " ";}cout << endl;}int main(void){test_array();system("pause");return 0;}

运行结果



本文原创,博文原始地址

http://blog.csdn.net/fengyhack/article/details/41867193



0 0
原创粉丝点击