Win7+vs2010下安装boost_1_46_1库
一、boost库分类:
(1)不需要编译库:any、array、asio、conversion、crc、bind/mem_fn、enable_if、function、lambda、mpl、smart_ptr...
(2)需要编译的库:date_time、filesystem、function_types、graph、iostreams、math、mpi、program_options、python、regex、serialization、signals、system、test、thread、wave
二、完全编译boost将要依赖的一些官方库:
(1)Regex所需Unicode支持类库 -- ICU ,编译ICU较为简单,解开ICU包之后,在其目录下可以找到一个叫"allinone"的目录,用Visual studio或者visual studio express打开里面的allinone.sln,选择release,即可以编译完成,编译之后,将include目录和lib目录下的库文件拷贝出来,分别放在C:\icu\include和C:\icu\lib。
(2)Graph所需的XML处理类库 --Expat,下载expat-win32bin-2.0.1安装到C:\expat即可。
(3)MPI所需MPI类库 -- Boost的官方站点说需要MPICH或OpenMPI之类的支持,事实上在Windows下总是会提示需要MPIC++,你需要的是Microsoft Cluster Pack SDK,下载并默认安装在C:\ProgramFiles\Microsoft Compute Cluster Pack下。(说明:如果安装Microsoft HPC Pack 2008 SDK或Microsoft Compute ClusterPack时不是装到默认的路径下,那bjam就会抓瞎,找不到mpic++的路径,这时候可以修改一下mpi.jam(在boost_1_46_1\tools\build\v2\tools): local cluster_pack_path_native = "你的路径")
(4)Python所需Python语言库--Python,下载Python 2.7.1 Windows Installer,安装到C:\
三、编译boost库:
1.下载安装包boost_1_46_1 选择下载windows版本
2.解压缩到D:\boost目录下
3.运行bootstrap.bat
(1)从vs2010的工具菜单进入命令提示窗口(单击“开始”按钮,指向“所有程序”,指向“Microsoft Visual Studio 2010”,指向“Visual Studio tools(工具)”,然后单击“Visual Studio 2010 command prompt(命令提示)”
(2)cd到D:\boost\boost_1_46_1下执行bootstrap.bat,然后,会在d:\boost\boost_1_46_1\下生成bjam.exe
4.设定编译环境(加入红色字体)
修改user-config.jam (d:\boost\boost_1_46_1\tools\build\v2\user-config.jam) 的MSVC configuration
# MSVC configuration
# Configure msvc (default version, searched in standard location # and PATH).
# using msvc ;
using msvc : 10.0 : : <compileflags>/wd4819 <compileflags>/D_CRT_SECURE_NO_DEPRECATE
<compileflags>/D_SCL_SECURE_NO_DEPRECATE <compileflags>/D_SECURE_SCL=0 ;
要支持mpi,你可以添加一行“using mpi ;”即可
5.cd到D:\boost\boost_1_46_1下执行
编译boost库命令:
bjam install -s HAVE_ICU=1 -s ICU_PATH=C:\icu --toolset=msvc-10.0 --build-type=complete link=static runtime-link=static --prefix="E:\boost\boost_1_46_1" threading=multi
variant=release
(这一步需要等待很长时间,大概一个小时左右……)
下面详细解释一下每个参数的含义:
stage/install:stage 表示只生成库(dll和lib),install还会生成包含头文件的include目录。推荐使用stage,因为install生成的这个include目录实际就是boost安装包解压缩后的boost目录,所以可以直接使用,而且不同的IDE都可以使用同一套头文件,这样既节省编译时间,也节省硬盘空间。
toolset:指定编译器,可选的如borland、gcc、msvc(VC6)、msvc-10.0(VS20010)等。
without/with:选择不编译/编译哪些库,不需要的可以without掉。这可以根据各人需要选择,默认是全部编译。但是需要注意,如果选择编译python的话,是需要python语言支持的,要先下载python。
stagedir/prefix:stage 时使用stagedir,install时使用prefix,表示编译生成文件的路径。(说明:使用install时,include文件目录结构是这样的E:\boost\boost_1_46_1\include\boost_1_46_1\boost,路径很累赘,可以去掉中间一层\boost_1_46_1。不管怎样,个人觉得还是使用stage好,一方面是快,另一方面也没这么纠结的目录)
build-dir:编译生成的中间文件的路径。这个本人这里没用到,默认就在根目录下,目录名为bin.v2,等编译完成后可将这个目录全部删除(没用了),所以不需要去设置。
link:生成动态链接库/静态链接库。生成动态链接库需使用shared方式,生成静态链接库需使用static方式。一般boost库可能都是以static方式编译,因为最终发布程序带着boost的dll感觉会比较累赘。
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版本,所以两个都编译。
如果不选择安装Python,两步:
(1)bjam --without-python --toolset=msvc-10.0 --build-type=complete
--prefix="E:\boost\boost_1_46_1" install
(2)bjam --with-python --toolset=msvc-10.0 --build-type=complete
--prefix="E:\boost\boost_1_46_1" install
6.设定vs2010环境
(注:在2010环境下这步,在项目-->右键属性-->VC++ Directories 中去填写对应路径 )
Tools -> Options -> Projects and Solutions -> VC++ Directories
在Library files加上E:\boost\boost_1_46_1\lib
在Include files加上E:\boost\boost_1_46_1\include
相关:
使用举例:
#include<boost\thread.hpp>
此时,不用包含库文件,boost的auto-link机制将会自动帮我们包含对应的静态lib。也就是说,boost默认是以静态方式链接的,这样我们的工程属性最好也设为Multi-threaded (Debug)。如果想使用dll动态方式链接,需要预先定义宏:
#define BOOST_ALL_DYN_LINK
同样,此时boost也会默认帮我们包含对应的lib。如果不想使用boost提供的auto-link机制,或者对它的自动链接不太放心的话(其实大可不必担心),可以预先定义宏:
#define BOOST_ALL_NO_LIB
然后使用以下方法链接:
#pragma comment(lib, "boost_thread-vc100-mt-1_46.lib")或
#pragma comment(lib, "boost_thread-vc100-mt.lib")
这两个lib其实是一样的,实在不明白boost编译时为什么每个库都要复制一份,难道是因为后者在升级boost版本后不用改代码?另外还有一个比较有用的宏:
#define BOOST_LIB_DIAGNOSTIC
它可以让VC在编译时的output窗口中输出程序具体链接了哪些boost库以及链接顺序。
关于boost的auto-link机制,详细可以看看boost\config\auto_link.hpp里的代码,很容易可以读懂,并且值得我们学习。
另:Linux下编译与配置的区别:
我的Linux与Windows使用了共享目录,将Windows下的E:\SDK目录映射成了Linux下的/mnt/hgfs/sdk目录。
所以我的boost源文件根目录就是/mnt/hgfs/sdk/boost_1_45_0,cd进去。
首先需要编译bjam:
cd tools/jam
./build_dist.sh
我在虚拟机的Linux下编译bjam的时候最后会卡住,屏幕显示到mkdir的地方就不往下走了,不过其实这时候bajm已经编译完成。
接下来将stage/bin.linuxx86目录下生成的bjam拷贝到boost源文件根目录boost_1_45_0下,cd进去,开始编译boost:
./bjam stage --toolset=gcc --with-date_time --with-thread --with-filesystem --with-program_options --stagedir="/mnt/hgfs/sdk/boost_1_45_0/bin/gcc" link=static runtime-link=static threading=multi debug release
这些参数的意义与Windows下完全一样,只不过编译器改成gcc,其他选项根据自己的需要进行设置。
生成的库文件就在bin/gcc/lib目录下,与vc10编译的一样,lib目录感觉是多余的,手动将库文件拷贝到gcc目录下,删掉lib目录,这属于个人喜好问题。
然后把中间文件全部删掉,包括bin.v2目录和tools/jam/stage目录。
关于boost库的使用,为了不用每次写makefile都把boost的头文件和库文件的路径带着,而且为了让跨平台程序公用一套代码,
可以将boost的头文件和库文件路径加到Linux的环境变量中。打开/etc/profile,加入以下gcc环境变量:
CPLUS_INCL?_PATH=$CPLUS_INCL?_PATH:"/mnt/hgfs/sdk/boost_1_45_0"
export CPLUS_INCL?_PATH
LIBRARY_PATH=$LIBRARY_PATH:"/mnt/hgfs/sdk/boost_1_45_0/bin/gcc"
export LIBRARY_PATH
这样就可以直接使用boost的头文件和库文件了,并且与Windows共用一套代码,非常方便。
Win7+vs2010下安装boost_1_46_1库的更多相关文章
- VS2010下安装boost库
在我们的C++项目中安装boost库,下面以VS2010版本作为例子,其它版本的设置也差不多. 一.编译生成boost库 1.下载最新的boost(本人下载的是boost_1_56_0).boost官 ...
- win7 64位系统下安装autoitlibrary库遇到问题解决
转载来自http://blog.sina.com.cn/s/blog_53f023270101skyq.html 今天需要在win7 64位系统下安装autoitlibrary库,起初安装好了robo ...
- ubuntu 下安装boost库
ubuntu下安装boost库,,在网上试了一些其他人推荐的libboost-dev 但是会缺少,编译程序会报错: /usr/bin/ld: cannot find -lboost_serializa ...
- linux下安装uuid库
1.linux 下安装UUID库 1.1)ubuntu下安装uuid链接库 sudo apt-get install uuid-dev 1.2)CentOS yum install libuuid-d ...
- 关于python下安装PIL库遇到的问题及解决办法
关于python下安装PIL库遇到的问题及解决办法 关于python下安装PIL库遇到的问题及解决办法 :在下面这个网址下载pipllow(a replacement for PIL) www.lfd ...
- 在Win7环境下安装启动Linux
在Win7环境下安装启动Linux 在Win7系统下,安装启动Linux特别的不方便,由于XP下的boot.ini配置文件不在了,要加入�一下启动选项的话, 仅仅能使用专门的工具,这或多或少给人带来不 ...
- 在win7系统下安装把Ubuntu17.04安装在另一个硬盘开机无法进入Ubuntu问题的一种解决办法。【转】
本文转载自:http://blog.csdn.net/u012879090/article/details/74937762 在win7系统下安装把Ubuntu17.04安装在另一个硬盘开机无法进入U ...
- win7 64 下安装MyGeneration 遇到的问题解决方法
win7 64 下安装MyGeneration 遇到的问题 ---------------------------MyGeneration 1.3 Setup-------------------- ...
- 14 win7 sp1下安装vs2015
0 引言 在win7下安装vs2015的时候遇到了很多问题,看了很多帖子,尝试了很多次,终于成功了.网上也有大量关于win7 sp1下安装vs2015的帖子,我在安装的时候也参考了很多相关经验,这次写 ...
随机推荐
- HDU1316(求区间斐波那契数的个数)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1316 题意:给两个数a和b,其中它们可能很大,最大到10^100,然后求去区间[a,b]内有多少个fib数 ...
- ubuntu apt-get 遇到的问题
装软件的时候总是提示dpkg: warning: files list file for package `*****' missing, assuming package has no files ...
- SVN - 笔记
SVN(版本控制) 1.什么是SVN · 多人共同开发同一个项目,内部最大的问题是,在比较短的时间内如果有多人同时开发同一个文件,会造成彼此的代码相互覆盖的情况发生. · 管理着随时间改变的数据,这些 ...
- 第1章 Lua基础
1.1 全局变量 全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得到的结果是:nil. 如果你想删除一个全局变量,只需要将变量负值为 nil ...
- javascript笔记整理(正则)
RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具 var re=/e/; var re=new RegExp('e'); 正则表达式的 String 对象的方法 1.search- ...
- JVM调优总结(三)-基本垃圾回收算法
可以从不同的的角度去划分垃圾回收算法: 按照基本回收策略分 引用计数(Reference Counting): 比较古老的回收算法.原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数. ...
- 海量数据存储之Key-Value存储简介
Key-value存储简介 具备高可靠性及可扩展性的海量数据存储对互联网公司来说是一个巨大的挑战,传统的数据库往往很难满足该需求,并且很多时候对于特定的系统绝大部分的检索都是基于主键的的查询,在这种情 ...
- ios开发问题:添加库和复制其它工程文件编译错误问题
首先添加库问题: 选择页签Build Phases->Link Binary With Libraries点+添加库 然后command+shift+k清除历史debug的垃圾 复制其它工程文件 ...
- java中的object类
在Java中,任何一个类都扩展来自Object类.当没有为某一个类定义父类时,Java会自动定义Object类为其父类. object类的一些常用方法: (1)public String toStri ...
- JQuery学习(3)
创建精灵界面导航: 有以下图,合理的布局让图片正确显示: 先写导航栏html代码: <div id="navMenu"> <ul id="spriteN ...