vs2015编译boost,
VS2010 Boost编译和安装(原版)-云上的小飞象CG-博客公园
VS2010 Boost编译安装(原创)“未经深入学习就简单转载他人,简直是对他人的不负责任!对不起浪费了一个多小时编这篇文章的朋友们!”
1.下载安装包boost 1_46_0
http://www.boost.org/users/news/version_1_46_0
选择要下载的windows或unix版本。
2.解压缩到D:\boost目录
3.编译bjam
(1)从vs2010的工具菜单进入命令提示符窗口(单击开始按钮,指向所有程序,指向Microsoft Visual Studio 2010,指向Visual Studio工具,然后单击Visual Studio 2010命令提示符)。
(2) bootstrap.bat将从2)cd执行到D:\boost\boost_1_46_0,然后在D:\boost\boost_1_46_0下生成bjam.exe
4.设置编译环境(如果要删除编译警告,需要修改它)
修改user-config . jam(D:\ boost \ boost _ 1 _ 46 _ 0 \ tools \ build \ v2 \ user-config . jam)的MSVC配置
# MSVC配置
#配置msvc(默认版本,在标准位置和路径中搜索)。
#使用msvc
使用msvc:10.0:compile flags/wd 4819 compile flags/D _ CRT _ SECURE _ NO _ DEPRECATE compile flags/D _ SCL _ SECURE _ NO _ DEPRECATE compile flags/D _ SECURE _ SCL=0;
5.将目录cd到D:\boost\boost_1_46_0\并执行它。
(1)编译boost库
bjamstage-without-python-toolset=msvc-10.0-build-type=complete-stage dir= d:\ boost \ boost _ 1 _ 46 _ 0 \ bin \ vc10 (这一步需要等待很长时间,大概一个小时左右.)
每个参数的含义详细解释如下:
Stage/install: stage表示只生成库(dll和lib),install也会生成包含头文件的include目录。
工具集:指定编译器,如borland、gcc、msvc(VC6)、msvc-10.0(VS20010)等。
不带/带:选择不编译/编译哪些库。
Stagedir/prefix: stagedir用于stage,prefix用于install,表示编译文件的路径。建议为不同的ide指定不同的目录。比如VS2010对应D:\boost\boost_1_46_0\bin\vc10,否则会生成在一个目录下,很难管理。
Build-dir:编译生成的中间文件的路径。我没有在这里使用这个。默认在根目录下(D:\boost\boost_1_46_0),目录名为bin.v2(删除)。编译完成后,可以删除这个目录(没用),所以不需要设置。
链接:生成动态链接库/静态链接库。动态链接库需要在共享模式下生成,静态链接库需要在静态模式下生成。一般来说,boost库都是静态编译的,因为最终发布者会觉得boost dll很笨重。
运行时链接:动态/静态链接的C/C运行时库。还有两种方式,共享和静态,让runtime-link和link产生四种组合,每个人可以根据自己的需要选择编译。一般如果link只选择static,只需要编译两个组合,即link=static runtime-link=shared和link=static runtime-link=static。
线程:单线程/多线程编译。一般写多线程程序,当然要指定多模式;如果需要编写单线程程序,还需要编译单线程库,可以在单模式下使用。
调试/发布:编译调试/发布版本。通常,程序的调试版本对应于库的调试版本,所以两者都被编译。
运行后(弹出输入提示)
6.设置vs2010环境。(注意:在2010环境下的这一步,填写项目中相应的路径——右键属性——VC目录)
修改环境变量:$(BOOST): D:\boost\boost_1_46_0
工具-选项-项目和解决方案- VC目录
将$(BOOST)\bin\vc10\lib添加到库文件中。
添加$(BOOST)以包含文件。
使用示例:
#包含boost\thread.hpp
此时,在不包含库文件的情况下,boost的自动链接机制会自动帮助我们包含相应的静态库。也就是说boost默认是静态链接的,所以最好把我们的工程属性设为多线程(Debug)。如果要使用dll动态链接,需要事先定义一个宏:
#定义BOOST_ALL_DYN_LINK
同样,boost也会默认为我们包含相应的lib。如果你不想使用boost提供的自动链接机制,或者对它的自动链接感觉不舒服(其实不用你操心),可以提前定义宏:
#define BOOST_ALL_NO_LIB
然后使用以下方法进行链接:
# pragma注释(lib, boost _ thread-vc100-mt-1 _ 46.lib )或
#pragma注释(lib, boost_thread-vc100-mt.lib )
这两个lib其实是一样的。真不明白为什么boost编译的时候每个库都要做一个副本。是因为后者升级了boost版本就不用改代码了吗?还有另一个有用的宏:
#定义升压库诊断
它允许VC在编译时在输出窗口中输出程序链接了哪些boost库以及链接顺序。
关于boost的自动链接机制,可以详细看看boost\config\auto_link.hpp中的代码,很容易读懂,值得学习。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。